<!DOCTYPE html><html><head>
      <title>02</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      
      <style>
      /*!
* reveal.js 4.0.2
* https://revealjs.com
* MIT licensed
*
* Copyright (C) 2020 Hakim El Hattab, https://hakim.se
*/
.reveal .r-stretch,.reveal .stretch{max-width:none;max-height:none}.reveal pre.r-stretch code,.reveal pre.stretch code{height:100%;max-height:100%;box-sizing:border-box}.reveal .r-fit-text{display:inline-block;white-space:nowrap}.reveal .r-stack{display:grid}.reveal .r-stack>*{grid-area:1/1;margin:auto}.reveal .r-hstack,.reveal .r-vstack{display:flex}.reveal .r-hstack img,.reveal .r-hstack video,.reveal .r-vstack img,.reveal .r-vstack video{min-width:0;min-height:0;-o-object-fit:contain;object-fit:contain}.reveal .r-vstack{flex-direction:column;align-items:center;justify-content:center}.reveal .r-hstack{flex-direction:row;align-items:center;justify-content:center}.reveal .items-stretch{align-items:stretch}.reveal .items-start{align-items:flex-start}.reveal .items-center{align-items:center}.reveal .items-end{align-items:flex-end}.reveal .justify-between{justify-content:space-between}.reveal .justify-around{justify-content:space-around}.reveal .justify-start{justify-content:flex-start}.reveal .justify-center{justify-content:center}.reveal .justify-end{justify-content:flex-end}html.reveal-full-page{width:100%;height:100%;height:100vh;height:calc(var(--vh,1vh) * 100);overflow:hidden}.reveal-viewport{height:100%;overflow:hidden;position:relative;line-height:1;margin:0;background-color:#fff;color:#000}.reveal .slides section .fragment{opacity:0;visibility:hidden;transition:all .2s ease;will-change:opacity}.reveal .slides section .fragment.visible{opacity:1;visibility:inherit}.reveal .slides section .fragment.disabled{transition:none}.reveal .slides section .fragment.grow{opacity:1;visibility:inherit}.reveal .slides section .fragment.grow.visible{transform:scale(1.3)}.reveal .slides section .fragment.shrink{opacity:1;visibility:inherit}.reveal .slides section .fragment.shrink.visible{transform:scale(.7)}.reveal .slides section .fragment.zoom-in{transform:scale(.1)}.reveal .slides section .fragment.zoom-in.visible{transform:none}.reveal .slides section .fragment.fade-out{opacity:1;visibility:inherit}.reveal .slides section .fragment.fade-out.visible{opacity:0;visibility:hidden}.reveal .slides section .fragment.semi-fade-out{opacity:1;visibility:inherit}.reveal .slides section .fragment.semi-fade-out.visible{opacity:.5;visibility:inherit}.reveal .slides section .fragment.strike{opacity:1;visibility:inherit}.reveal .slides section .fragment.strike.visible{text-decoration:line-through}.reveal .slides section .fragment.fade-up{transform:translate(0,40px)}.reveal .slides section .fragment.fade-up.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-down{transform:translate(0,-40px)}.reveal .slides section .fragment.fade-down.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-right{transform:translate(-40px,0)}.reveal .slides section .fragment.fade-right.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-left{transform:translate(40px,0)}.reveal .slides section .fragment.fade-left.visible{transform:translate(0,0)}.reveal .slides section .fragment.current-visible,.reveal .slides section .fragment.fade-in-then-out{opacity:0;visibility:hidden}.reveal .slides section .fragment.current-visible.current-fragment,.reveal .slides section .fragment.fade-in-then-out.current-fragment{opacity:1;visibility:inherit}.reveal .slides section .fragment.fade-in-then-semi-out{opacity:0;visibility:hidden}.reveal .slides section .fragment.fade-in-then-semi-out.visible{opacity:.5;visibility:inherit}.reveal .slides section .fragment.fade-in-then-semi-out.current-fragment{opacity:1;visibility:inherit}.reveal .slides section .fragment.highlight-blue,.reveal .slides section .fragment.highlight-current-blue,.reveal .slides section .fragment.highlight-current-green,.reveal .slides section .fragment.highlight-current-red,.reveal .slides section .fragment.highlight-green,.reveal .slides section .fragment.highlight-red{opacity:1;visibility:inherit}.reveal .slides section .fragment.highlight-red.visible{color:#ff2c2d}.reveal .slides section .fragment.highlight-green.visible{color:#17ff2e}.reveal .slides section .fragment.highlight-blue.visible{color:#1b91ff}.reveal .slides section .fragment.highlight-current-red.current-fragment{color:#ff2c2d}.reveal .slides section .fragment.highlight-current-green.current-fragment{color:#17ff2e}.reveal .slides section .fragment.highlight-current-blue.current-fragment{color:#1b91ff}.reveal:after{content:'';font-style:italic}.reveal iframe{z-index:1}.reveal a{position:relative}@keyframes bounce-right{0%,10%,25%,40%,50%{transform:translateX(0)}20%{transform:translateX(10px)}30%{transform:translateX(-5px)}}@keyframes bounce-left{0%,10%,25%,40%,50%{transform:translateX(0)}20%{transform:translateX(-10px)}30%{transform:translateX(5px)}}@keyframes bounce-down{0%,10%,25%,40%,50%{transform:translateY(0)}20%{transform:translateY(10px)}30%{transform:translateY(-5px)}}.reveal .controls{display:none;position:absolute;top:auto;bottom:12px;right:12px;left:auto;z-index:11;color:#000;pointer-events:none;font-size:10px}.reveal .controls button{position:absolute;padding:0;background-color:transparent;border:0;outline:0;cursor:pointer;color:currentColor;transform:scale(.9999);transition:color .2s ease,opacity .2s ease,transform .2s ease;z-index:2;pointer-events:auto;font-size:inherit;visibility:hidden;opacity:0;-webkit-appearance:none;-webkit-tap-highlight-color:transparent}.reveal .controls .controls-arrow:after,.reveal .controls .controls-arrow:before{content:'';position:absolute;top:0;left:0;width:2.6em;height:.5em;border-radius:.25em;background-color:currentColor;transition:all .15s ease,background-color .8s ease;transform-origin:.2em 50%;will-change:transform}.reveal .controls .controls-arrow{position:relative;width:3.6em;height:3.6em}.reveal .controls .controls-arrow:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal .controls .controls-arrow:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}.reveal .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(40deg)}.reveal .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-40deg)}.reveal .controls .controls-arrow:active:before{transform:translateX(.5em) translateY(1.55em) rotate(36deg)}.reveal .controls .controls-arrow:active:after{transform:translateX(.5em) translateY(1.55em) rotate(-36deg)}.reveal .controls .navigate-left{right:6.4em;bottom:3.2em;transform:translateX(-10px)}.reveal .controls .navigate-left.highlight{animation:bounce-left 2s 50 both ease-out}.reveal .controls .navigate-right{right:0;bottom:3.2em;transform:translateX(10px)}.reveal .controls .navigate-right .controls-arrow{transform:rotate(180deg)}.reveal .controls .navigate-right.highlight{animation:bounce-right 2s 50 both ease-out}.reveal .controls .navigate-up{right:3.2em;bottom:6.4em;transform:translateY(-10px)}.reveal .controls .navigate-up .controls-arrow{transform:rotate(90deg)}.reveal .controls .navigate-down{right:3.2em;bottom:-1.4em;padding-bottom:1.4em;transform:translateY(10px)}.reveal .controls .navigate-down .controls-arrow{transform:rotate(-90deg)}.reveal .controls .navigate-down.highlight{animation:bounce-down 2s 50 both ease-out}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled{opacity:.3}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled:hover{opacity:1}.reveal .controls[data-controls-back-arrows=hidden] .navigate-up.enabled{opacity:0;visibility:hidden}.reveal .controls .enabled{visibility:visible;opacity:.9;cursor:pointer;transform:none}.reveal .controls .enabled.fragmented{opacity:.5}.reveal .controls .enabled.fragmented:hover,.reveal .controls .enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled{opacity:.3}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=hidden] .navigate-left.enabled{opacity:0;visibility:hidden}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled{opacity:.3}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled:hover{opacity:1}.reveal.rtl .controls[data-controls-back-arrows=hidden] .navigate-right.enabled{opacity:0;visibility:hidden}.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-down,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-up{display:none}.reveal:not(.has-vertical-slides) .controls .navigate-left,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-left{bottom:1.4em;right:5.5em}.reveal:not(.has-vertical-slides) .controls .navigate-right,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-right{bottom:1.4em;right:.5em}.reveal:not(.has-horizontal-slides) .controls .navigate-up{right:1.4em;bottom:5em}.reveal:not(.has-horizontal-slides) .controls .navigate-down{right:1.4em;bottom:.5em}.reveal.has-dark-background .controls{color:#fff}.reveal.has-light-background .controls{color:#000}.reveal.no-hover .controls .controls-arrow:active:before,.reveal.no-hover .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal.no-hover .controls .controls-arrow:active:after,.reveal.no-hover .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}@media screen and (min-width:500px){.reveal .controls[data-controls-layout=edges]{top:0;right:0;bottom:0;left:0}.reveal .controls[data-controls-layout=edges] .navigate-down,.reveal .controls[data-controls-layout=edges] .navigate-left,.reveal .controls[data-controls-layout=edges] .navigate-right,.reveal .controls[data-controls-layout=edges] .navigate-up{bottom:auto;right:auto}.reveal .controls[data-controls-layout=edges] .navigate-left{top:50%;left:.8em;margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-right{top:50%;right:.8em;margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-up{top:.8em;left:50%;margin-left:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-down{bottom:-.3em;left:50%;margin-left:-1.8em}}.reveal .progress{position:absolute;display:none;height:3px;width:100%;bottom:0;left:0;z-index:10;background-color:rgba(0,0,0,.2);color:#fff}.reveal .progress:after{content:'';display:block;position:absolute;height:10px;width:100%;top:-10px}.reveal .progress span{display:block;height:100%;width:100%;background-color:currentColor;transition:transform .8s cubic-bezier(.26,.86,.44,.985);transform-origin:0 0;transform:scaleX(0)}.reveal .slide-number{position:absolute;display:block;right:8px;bottom:8px;z-index:31;font-family:Helvetica,sans-serif;font-size:12px;line-height:1;color:#fff;background-color:rgba(0,0,0,.4);padding:5px}.reveal .slide-number a{color:currentColor}.reveal .slide-number-delimiter{margin:0 3px}.reveal{position:relative;width:100%;height:100%;overflow:hidden;touch-action:pinch-zoom}.reveal.embedded{touch-action:pan-y}.reveal .slides{position:absolute;width:100%;height:100%;top:0;right:0;bottom:0;left:0;margin:auto;pointer-events:none;overflow:visible;z-index:1;text-align:center;perspective:600px;perspective-origin:50% 40%}.reveal .slides>section{perspective:600px}.reveal .slides>section,.reveal .slides>section>section{display:none;position:absolute;width:100%;pointer-events:auto;z-index:10;transform-style:flat;transition:transform-origin .8s cubic-bezier(.26,.86,.44,.985),transform .8s cubic-bezier(.26,.86,.44,.985),visibility .8s cubic-bezier(.26,.86,.44,.985),opacity .8s cubic-bezier(.26,.86,.44,.985)}.reveal[data-transition-speed=fast] .slides section{transition-duration:.4s}.reveal[data-transition-speed=slow] .slides section{transition-duration:1.2s}.reveal .slides section[data-transition-speed=fast]{transition-duration:.4s}.reveal .slides section[data-transition-speed=slow]{transition-duration:1.2s}.reveal .slides>section.stack{padding-top:0;padding-bottom:0;pointer-events:none;height:100%}.reveal .slides>section.present,.reveal .slides>section>section.present{display:block;z-index:11;opacity:1}.reveal .slides>section:empty,.reveal .slides>section>section:empty,.reveal .slides>section>section[data-background-interactive],.reveal .slides>section[data-background-interactive]{pointer-events:none}.reveal.center,.reveal.center .slides,.reveal.center .slides section{min-height:0!important}.reveal .slides>section:not(.present),.reveal .slides>section>section:not(.present){pointer-events:none}.reveal.overview .slides>section,.reveal.overview .slides>section>section{pointer-events:auto}.reveal .slides>section.future,.reveal .slides>section.past,.reveal .slides>section>section.future,.reveal .slides>section>section.past{opacity:0}.reveal.slide section{-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal .slides>section[data-transition=slide].past,.reveal .slides>section[data-transition~=slide-out].past,.reveal.slide .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=slide].future,.reveal .slides>section[data-transition~=slide-in].future,.reveal.slide .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=slide].past,.reveal .slides>section>section[data-transition~=slide-out].past,.reveal.slide .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=slide].future,.reveal .slides>section>section[data-transition~=slide-in].future,.reveal.slide .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal.linear section{-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal .slides>section[data-transition=linear].past,.reveal .slides>section[data-transition~=linear-out].past,.reveal.linear .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=linear].future,.reveal .slides>section[data-transition~=linear-in].future,.reveal.linear .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=linear].past,.reveal .slides>section>section[data-transition~=linear-out].past,.reveal.linear .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=linear].future,.reveal .slides>section>section[data-transition~=linear-in].future,.reveal.linear .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal .slides section[data-transition=default].stack,.reveal.default .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=default].past,.reveal .slides>section[data-transition~=default-out].past,.reveal.default .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=default].future,.reveal .slides>section[data-transition~=default-in].future,.reveal.default .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=default].past,.reveal .slides>section>section[data-transition~=default-out].past,.reveal.default .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=default].future,.reveal .slides>section>section[data-transition~=default-in].future,.reveal.default .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=convex].stack,.reveal.convex .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=convex].past,.reveal .slides>section[data-transition~=convex-out].past,.reveal.convex .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=convex].future,.reveal .slides>section[data-transition~=convex-in].future,.reveal.convex .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=convex].past,.reveal .slides>section>section[data-transition~=convex-out].past,.reveal.convex .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=convex].future,.reveal .slides>section>section[data-transition~=convex-in].future,.reveal.convex .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=concave].stack,.reveal.concave .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=concave].past,.reveal .slides>section[data-transition~=concave-out].past,.reveal.concave .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=concave].future,.reveal .slides>section[data-transition~=concave-in].future,.reveal.concave .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=concave].past,.reveal .slides>section>section[data-transition~=concave-out].past,.reveal.concave .slides>section>section:not([data-transition]).past{transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0)}.reveal .slides>section>section[data-transition=concave].future,.reveal .slides>section>section[data-transition~=concave-in].future,.reveal.concave .slides>section>section:not([data-transition]).future{transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0)}.reveal .slides section[data-transition=zoom],.reveal.zoom .slides section:not([data-transition]){transition-timing-function:ease}.reveal .slides>section[data-transition=zoom].past,.reveal .slides>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section:not([data-transition]).past{visibility:hidden;transform:scale(16)}.reveal .slides>section[data-transition=zoom].future,.reveal .slides>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section:not([data-transition]).future{visibility:hidden;transform:scale(.2)}.reveal .slides>section>section[data-transition=zoom].past,.reveal .slides>section>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section>section:not([data-transition]).past{transform:scale(16)}.reveal .slides>section>section[data-transition=zoom].future,.reveal .slides>section>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section>section:not([data-transition]).future{transform:scale(.2)}.reveal.cube .slides{perspective:1300px}.reveal.cube .slides section{padding:30px;min-height:700px;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;transform-style:preserve-3d}.reveal.center.cube .slides section{min-height:0}.reveal.cube .slides section:not(.stack):before{content:'';position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);border-radius:4px;transform:translateZ(-20px)}.reveal.cube .slides section:not(.stack):after{content:'';position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);transform:translateZ(-90px) rotateX(65deg)}.reveal.cube .slides>section.stack{padding:0;background:0 0}.reveal.cube .slides>section.past{transform-origin:100% 0;transform:translate3d(-100%,0,0) rotateY(-90deg)}.reveal.cube .slides>section.future{transform-origin:0 0;transform:translate3d(100%,0,0) rotateY(90deg)}.reveal.cube .slides>section>section.past{transform-origin:0 100%;transform:translate3d(0,-100%,0) rotateX(90deg)}.reveal.cube .slides>section>section.future{transform-origin:0 0;transform:translate3d(0,100%,0) rotateX(-90deg)}.reveal.page .slides{perspective-origin:0 50%;perspective:3000px}.reveal.page .slides section{padding:30px;min-height:700px;box-sizing:border-box;transform-style:preserve-3d}.reveal.page .slides section.past{z-index:12}.reveal.page .slides section:not(.stack):before{content:'';position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);transform:translateZ(-20px)}.reveal.page .slides section:not(.stack):after{content:'';position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg)}.reveal.page .slides>section.stack{padding:0;background:0 0}.reveal.page .slides>section.past{transform-origin:0 0;transform:translate3d(-40%,0,0) rotateY(-80deg)}.reveal.page .slides>section.future{transform-origin:100% 0;transform:translate3d(0,0,0)}.reveal.page .slides>section>section.past{transform-origin:0 0;transform:translate3d(0,-40%,0) rotateX(80deg)}.reveal.page .slides>section>section.future{transform-origin:0 100%;transform:translate3d(0,0,0)}.reveal .slides section[data-transition=fade],.reveal.fade .slides section:not([data-transition]),.reveal.fade .slides>section>section:not([data-transition]){transform:none;transition:opacity .5s}.reveal.fade.overview .slides section,.reveal.fade.overview .slides>section>section{transition:none}.reveal .slides section[data-transition=none],.reveal.none .slides section:not([data-transition]){transform:none;transition:none}.reveal .pause-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;visibility:hidden;opacity:0;z-index:100;transition:all 1s ease}.reveal .pause-overlay .resume-button{position:absolute;bottom:20px;right:20px;color:#ccc;border-radius:2px;padding:6px 14px;border:2px solid #ccc;font-size:16px;background:0 0;cursor:pointer}.reveal .pause-overlay .resume-button:hover{color:#fff;border-color:#fff}.reveal.paused .pause-overlay{visibility:visible;opacity:1}.reveal .no-transition,.reveal .no-transition *,.reveal .slides.disable-slide-transitions section{transition:none!important}.reveal .slides.disable-slide-transitions section{transform:none!important}.reveal .backgrounds{position:absolute;width:100%;height:100%;top:0;left:0;perspective:600px}.reveal .slide-background{display:none;position:absolute;width:100%;height:100%;opacity:0;visibility:hidden;overflow:hidden;background-color:rgba(0,0,0,0);transition:all .8s cubic-bezier(.26,.86,.44,.985)}.reveal .slide-background-content{position:absolute;width:100%;height:100%;background-position:50% 50%;background-repeat:no-repeat;background-size:cover}.reveal .slide-background.stack{display:block}.reveal .slide-background.present{opacity:1;visibility:visible;z-index:2}.print-pdf .reveal .slide-background{opacity:1!important;visibility:visible!important}.reveal .slide-background video{position:absolute;width:100%;height:100%;max-width:none;max-height:none;top:0;left:0;-o-object-fit:cover;object-fit:cover}.reveal .slide-background[data-background-size=contain] video{-o-object-fit:contain;object-fit:contain}.reveal>.backgrounds .slide-background[data-background-transition=none],.reveal[data-background-transition=none]>.backgrounds .slide-background{transition:none}.reveal>.backgrounds .slide-background[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background{opacity:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal>.backgrounds .slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.past{transform:translate(-100%,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.future{transform:translate(100%,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past{transform:translate(0,-100%)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future{transform:translate(0,100%)}.reveal>.backgrounds .slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.past{opacity:0;transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.future{opacity:0;transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past{opacity:0;transform:translate3d(0,-100%,0) rotateX(90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future{opacity:0;transform:translate3d(0,100%,0) rotateX(-90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.past{opacity:0;transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.future{opacity:0;transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past{opacity:0;transform:translate3d(0,-100%,0) rotateX(-90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future{opacity:0;transform:translate3d(0,100%,0) rotateX(90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background{transition-timing-function:ease}.reveal>.backgrounds .slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.past{opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.future{opacity:0;visibility:hidden;transform:scale(.2)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past{opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future{opacity:0;visibility:hidden;transform:scale(.2)}.reveal[data-transition-speed=fast]>.backgrounds .slide-background{transition-duration:.4s}.reveal[data-transition-speed=slow]>.backgrounds .slide-background{transition-duration:1.2s}.reveal [data-auto-animate-target^=unmatched]{will-change:opacity}.reveal section[data-auto-animate]:not(.stack):not([data-auto-animate=running]) [data-auto-animate-target^=unmatched]{opacity:0}.reveal.overview{perspective-origin:50% 50%;perspective:700px}.reveal.overview .slides{-moz-transform-style:preserve-3d}.reveal.overview .slides section{height:100%;top:0!important;opacity:1!important;overflow:hidden;visibility:visible!important;cursor:pointer;box-sizing:border-box}.reveal.overview .slides section.present,.reveal.overview .slides section:hover{outline:10px solid rgba(150,150,150,.4);outline-offset:10px}.reveal.overview .slides section .fragment{opacity:1;transition:none}.reveal.overview .slides section:after,.reveal.overview .slides section:before{display:none!important}.reveal.overview .slides>section.stack{padding:0;top:0!important;background:0 0;outline:0;overflow:visible}.reveal.overview .backgrounds{perspective:inherit;-moz-transform-style:preserve-3d}.reveal.overview .backgrounds .slide-background{opacity:1;visibility:visible;outline:10px solid rgba(150,150,150,.1);outline-offset:10px}.reveal.overview .backgrounds .slide-background.stack{overflow:visible}.reveal.overview .slides section,.reveal.overview-deactivating .slides section{transition:none}.reveal.overview .backgrounds .slide-background,.reveal.overview-deactivating .backgrounds .slide-background{transition:none}.reveal.rtl .slides,.reveal.rtl .slides h1,.reveal.rtl .slides h2,.reveal.rtl .slides h3,.reveal.rtl .slides h4,.reveal.rtl .slides h5,.reveal.rtl .slides h6{direction:rtl;font-family:sans-serif}.reveal.rtl code,.reveal.rtl pre{direction:ltr}.reveal.rtl ol,.reveal.rtl ul{text-align:right}.reveal.rtl .progress span{transform-origin:100% 0}.reveal.has-parallax-background .backgrounds{transition:all .8s ease}.reveal.has-parallax-background[data-transition-speed=fast] .backgrounds{transition-duration:.4s}.reveal.has-parallax-background[data-transition-speed=slow] .backgrounds{transition-duration:1.2s}.reveal>.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000;background:rgba(0,0,0,.9);transition:all .3s ease}.reveal>.overlay .spinner{position:absolute;display:block;top:50%;left:50%;width:32px;height:32px;margin:-16px 0 0 -16px;z-index:10;background-image:url(%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);visibility:visible;opacity:.6;transition:all .3s ease}.reveal>.overlay header{position:absolute;left:0;top:0;width:100%;padding:5px;z-index:2;box-sizing:border-box}.reveal>.overlay header a{display:inline-block;width:40px;height:40px;line-height:36px;padding:0 10px;float:right;opacity:.6;box-sizing:border-box}.reveal>.overlay header a:hover{opacity:1}.reveal>.overlay header a .icon{display:inline-block;width:20px;height:20px;background-position:50% 50%;background-size:100%;background-repeat:no-repeat}.reveal>.overlay header a.close .icon{background-image:url()}.reveal>.overlay header a.external .icon{background-image:url()}.reveal>.overlay .viewport{position:absolute;display:flex;top:50px;right:0;bottom:0;left:0}.reveal>.overlay.overlay-preview .viewport iframe{width:100%;height:100%;max-width:100%;max-height:100%;border:0;opacity:0;visibility:hidden;transition:all .3s ease}.reveal>.overlay.overlay-preview.loaded .viewport iframe{opacity:1;visibility:visible}.reveal>.overlay.overlay-preview.loaded .viewport-inner{position:absolute;z-index:-1;left:0;top:45%;width:100%;text-align:center;letter-spacing:normal}.reveal>.overlay.overlay-preview .x-frame-error{opacity:0;transition:opacity .3s ease .3s}.reveal>.overlay.overlay-preview.loaded .x-frame-error{opacity:1}.reveal>.overlay.overlay-preview.loaded .spinner{opacity:0;visibility:hidden;transform:scale(.2)}.reveal>.overlay.overlay-help .viewport{overflow:auto;color:#fff}.reveal>.overlay.overlay-help .viewport .viewport-inner{width:600px;margin:auto;padding:20px 20px 80px 20px;text-align:center;letter-spacing:normal}.reveal>.overlay.overlay-help .viewport .viewport-inner .title{font-size:20px}.reveal>.overlay.overlay-help .viewport .viewport-inner table{border:1px solid #fff;border-collapse:collapse;font-size:16px}.reveal>.overlay.overlay-help .viewport .viewport-inner table td,.reveal>.overlay.overlay-help .viewport .viewport-inner table th{width:200px;padding:14px;border:1px solid #fff;vertical-align:middle}.reveal>.overlay.overlay-help .viewport .viewport-inner table th{padding-top:20px;padding-bottom:20px}.reveal .playback{position:absolute;left:15px;bottom:20px;z-index:30;cursor:pointer;transition:all .4s ease;-webkit-tap-highlight-color:transparent}.reveal.overview .playback{opacity:0;visibility:hidden}.reveal .hljs{min-height:100%}.reveal .hljs table{margin:initial}.reveal .hljs-ln-code,.reveal .hljs-ln-numbers{padding:0;border:0}.reveal .hljs-ln-numbers{opacity:.6;padding-right:.75em;text-align:right;vertical-align:top}.reveal .hljs.has-highlights tr:not(.highlight-line){opacity:.4}.reveal .hljs:not(:first-child).fragment{position:absolute;top:0;left:0;width:100%;box-sizing:border-box}.reveal pre[data-auto-animate-target]{overflow:hidden}.reveal pre[data-auto-animate-target] code{height:100%}.reveal .roll{display:inline-block;line-height:1.2;overflow:hidden;vertical-align:top;perspective:400px;perspective-origin:50% 50%}.reveal .roll:hover{background:0 0;text-shadow:none}.reveal .roll span{display:block;position:relative;padding:0 2px;pointer-events:none;transition:all .4s ease;transform-origin:50% 0;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal .roll:hover span{background:rgba(0,0,0,.5);transform:translate3d(0,0,-45px) rotateX(90deg)}.reveal .roll span:after{content:attr(data-title);display:block;position:absolute;left:0;top:0;padding:0 2px;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform-origin:50% 0;transform:translate3d(0,110%,0) rotateX(-90deg)}.reveal aside.notes{display:none}.reveal .speaker-notes{display:none;position:absolute;width:33.33333%;height:100%;top:0;left:100%;padding:14px 18px 14px 18px;z-index:1;font-size:18px;line-height:1.4;border:1px solid rgba(0,0,0,.05);color:#222;background-color:#f5f5f5;overflow:auto;box-sizing:border-box;text-align:left;font-family:Helvetica,sans-serif;-webkit-overflow-scrolling:touch}.reveal .speaker-notes .notes-placeholder{color:#ccc;font-style:italic}.reveal .speaker-notes:focus{outline:0}.reveal .speaker-notes:before{content:'Speaker notes';display:block;margin-bottom:10px;opacity:.5}.reveal.show-notes{max-width:75%;overflow:visible}.reveal.show-notes .speaker-notes{display:block}@media screen and (min-width:1600px){.reveal .speaker-notes{font-size:20px}}@media screen and (max-width:1024px){.reveal.show-notes{border-left:0;max-width:none;max-height:70%;max-height:70vh;overflow:visible}.reveal.show-notes .speaker-notes{top:100%;left:0;width:100%;height:42.85714%;height:30vh;border:0}}@media screen and (max-width:600px){.reveal.show-notes{max-height:60%;max-height:60vh}.reveal.show-notes .speaker-notes{top:100%;height:66.66667%;height:40vh}.reveal .speaker-notes{font-size:14px}}.zoomed .reveal *,.zoomed .reveal :after,.zoomed .reveal :before{-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.zoomed .reveal .controls,.zoomed .reveal .progress{opacity:0}.zoomed .reveal .roll span{background:0 0}.zoomed .reveal .roll span:after{visibility:hidden}html.print-pdf *{-webkit-print-color-adjust:exact}html.print-pdf{width:100%;height:100%;overflow:visible}html.print-pdf body{margin:0 auto!important;border:0;padding:0;float:none!important;overflow:visible}html.print-pdf .nestedarrow,html.print-pdf .reveal .controls,html.print-pdf .reveal .playback,html.print-pdf .reveal .progress,html.print-pdf .reveal.overview,html.print-pdf .state-background{display:none!important}html.print-pdf .reveal pre code{overflow:hidden!important;font-family:Courier,'Courier New',monospace!important}html.print-pdf .reveal{width:auto!important;height:auto!important;overflow:hidden!important}html.print-pdf .reveal .slides{position:static;width:100%!important;height:auto!important;zoom:1!important;pointer-events:initial;left:auto;top:auto;margin:0!important;padding:0!important;overflow:visible;display:block;perspective:none;perspective-origin:50% 50%}html.print-pdf .reveal .slides .pdf-page{position:relative;overflow:hidden;z-index:1;page-break-after:always}html.print-pdf .reveal .slides section{visibility:visible!important;display:block!important;position:absolute!important;margin:0!important;padding:0!important;box-sizing:border-box!important;min-height:1px;opacity:1!important;transform-style:flat!important;transform:none!important}html.print-pdf .reveal section.stack{position:relative!important;margin:0!important;padding:0!important;page-break-after:avoid!important;height:auto!important;min-height:auto!important}html.print-pdf .reveal img{box-shadow:none}html.print-pdf .reveal .backgrounds{display:none}html.print-pdf .reveal .slide-background{display:block!important;position:absolute;top:0;left:0;width:100%;height:100%;z-index:auto!important}html.print-pdf .reveal.show-notes{max-width:none;max-height:none}html.print-pdf .reveal .speaker-notes-pdf{display:block;width:100%;height:auto;max-height:none;top:auto;right:auto;bottom:auto;left:auto;z-index:100}html.print-pdf .reveal .speaker-notes-pdf[data-layout=separate-page]{position:relative;color:inherit;background-color:transparent;padding:20px;page-break-after:always;border:0}html.print-pdf .reveal .slide-number-pdf{display:block;position:absolute;font-size:14px}html.print-pdf .aria-status{display:none}@media print{html:not(.print-pdf){background:#fff;width:auto;height:auto;overflow:visible}html:not(.print-pdf) body{background:#fff;font-size:20pt;width:auto;height:auto;border:0;margin:0 5%;padding:0;overflow:visible;float:none!important}html:not(.print-pdf) .controls,html:not(.print-pdf) .fork-reveal,html:not(.print-pdf) .nestedarrow,html:not(.print-pdf) .reveal .backgrounds,html:not(.print-pdf) .reveal .progress,html:not(.print-pdf) .reveal .slide-number,html:not(.print-pdf) .share-reveal,html:not(.print-pdf) .state-background{display:none!important}html:not(.print-pdf) body,html:not(.print-pdf) li,html:not(.print-pdf) p,html:not(.print-pdf) td{font-size:20pt!important;color:#000}html:not(.print-pdf) h1,html:not(.print-pdf) h2,html:not(.print-pdf) h3,html:not(.print-pdf) h4,html:not(.print-pdf) h5,html:not(.print-pdf) h6{color:#000!important;height:auto;line-height:normal;text-align:left;letter-spacing:normal}html:not(.print-pdf) h1{font-size:28pt!important}html:not(.print-pdf) h2{font-size:24pt!important}html:not(.print-pdf) h3{font-size:22pt!important}html:not(.print-pdf) h4{font-size:22pt!important;font-variant:small-caps}html:not(.print-pdf) h5{font-size:21pt!important}html:not(.print-pdf) h6{font-size:20pt!important;font-style:italic}html:not(.print-pdf) a:link,html:not(.print-pdf) a:visited{color:#000!important;font-weight:700;text-decoration:underline}html:not(.print-pdf) div,html:not(.print-pdf) ol,html:not(.print-pdf) p,html:not(.print-pdf) ul{visibility:visible;position:static;width:auto;height:auto;display:block;overflow:visible;margin:0;text-align:left!important}html:not(.print-pdf) .reveal pre,html:not(.print-pdf) .reveal table{margin-left:0;margin-right:0}html:not(.print-pdf) .reveal pre code{padding:20px}html:not(.print-pdf) .reveal blockquote{margin:20px 0}html:not(.print-pdf) .reveal .slides{position:static!important;width:auto!important;height:auto!important;left:0!important;top:0!important;margin-left:0!important;margin-top:0!important;padding:0!important;zoom:1!important;transform:none!important;overflow:visible!important;display:block!important;text-align:left!important;perspective:none;perspective-origin:50% 50%}html:not(.print-pdf) .reveal .slides section{visibility:visible!important;position:static!important;width:auto!important;height:auto!important;display:block!important;overflow:visible!important;left:0!important;top:0!important;margin-left:0!important;margin-top:0!important;padding:60px 20px!important;z-index:auto!important;opacity:1!important;page-break-after:always!important;transform-style:flat!important;transform:none!important;transition:none!important}html:not(.print-pdf) .reveal .slides section.stack{padding:0!important}html:not(.print-pdf) .reveal section:last-of-type{page-break-after:avoid!important}html:not(.print-pdf) .reveal section .fragment{opacity:1!important;visibility:visible!important;transform:none!important}html:not(.print-pdf) .reveal section img{display:block;margin:15px 0;background:#fff;border:1px solid #666;box-shadow:none}html:not(.print-pdf) .reveal section small{font-size:.8em}html:not(.print-pdf) .reveal .hljs{max-height:100%;white-space:pre-wrap;word-wrap:break-word;word-break:break-word;font-size:15pt}html:not(.print-pdf) .reveal .hljs .hljs-ln-numbers{white-space:nowrap}html:not(.print-pdf) .reveal .hljs td{font-size:inherit!important;color:inherit!important}}
      
      </style>
      
        <script type="text/x-mathjax-config">
          MathJax.Hub.Config({"extensions":["tex2jax.js"],"jax":["input/TeX","output/HTML-CSS"],"messageStyle":"none","tex2jax":{"processEnvironments":false,"processEscapes":true,"inlineMath":[["$","$"],["\\(","\\)"]],"displayMath":[["$$","$$"],["\\[","\\]"]],"skipTags":["script","noscript","style","textarea","pre","code"]},"displayAlign":"left","displayIndent":"0.05rem","TeX":{"equationNumbers":{"autoNumber":"none","useLabelIds":true},"extensions":["AMSmath.js","AMSsymbols.js","noErrors.js","noUndefined.js","action.js","cancel.js","enclose.js","mhchem.js","extpfeil.js"],"Macros":{"zerov":"{\\boldsymbol 0}","onev":"{\\boldsymbol 1}","av":"{\\boldsymbol a}","bv":"{\\boldsymbol b}","cv":"{\\boldsymbol c}","dv":"{\\boldsymbol d}","ev":"{\\boldsymbol e}","fv":"{\\boldsymbol f}","gv":"{\\boldsymbol g}","hv":"{\\boldsymbol h}","iv":"{\\boldsymbol i}","jv":"{\\boldsymbol j}","kv":"{\\boldsymbol k}","lv":"{\\boldsymbol l}","mv":"{\\boldsymbol m}","nv":"{\\boldsymbol n}","ov":"{\\boldsymbol o}","pv":"{\\boldsymbol p}","qv":"{\\boldsymbol q}","rv":"{\\boldsymbol r}","sv":"{\\boldsymbol s}","tv":"{\\boldsymbol t}","uv":"{\\boldsymbol u}","vv":"{\\boldsymbol v}","wv":"{\\boldsymbol w}","xv":"{\\boldsymbol x}","yv":"{\\boldsymbol y}","zv":"{\\boldsymbol z}","Av":"{\\mathbf A}","Bv":"{\\mathbf B}","Cv":"{\\mathbf C}","Dv":"{\\mathbf D}","Ev":"{\\mathbf E}","Fv":"{\\mathbf F}","Gv":"{\\mathbf G}","Hv":"{\\mathbf H}","Iv":"{\\mathbf I}","Jv":"{\\mathbf J}","Kv":"{\\mathbf K}","Lv":"{\\mathbf L}","Mv":"{\\mathbf M}","Nv":"{\\mathbf N}","Ov":"{\\mathbf O}","Pv":"{\\mathbf P}","Qv":"{\\mathbf Q}","Rv":"{\\mathbf R}","Sv":"{\\mathbf S}","Tv":"{\\mathbf T}","Uv":"{\\mathbf U}","Vv":"{\\mathbf V}","Wv":"{\\mathbf W}","Xv":"{\\mathbf X}","Yv":"{\\mathbf Y}","Zv":"{\\mathbf Z}","alphav":"{\\boldsymbol {\\alpha}}","betav":"{\\boldsymbol {\\beta}}","lambdav":"{\\boldsymbol {\\lambda}}","muv":"{\\boldsymbol {\\mu}}","thetav":"{\\boldsymbol {\\theta}}","phiv":"{\\boldsymbol {\\phi}}","zetav":"{\\boldsymbol {\\zeta}}","deltav":"{\\boldsymbol {\\delta}}","Sigmav":"{\\boldsymbol {\\Sigma}}","Phiv":"{\\boldsymbol {\\Phi}}","Lambdav":"{\\boldsymbol {\\Lambda}}","Omegav":"{\\boldsymbol {\\Omega}}","Cbb":"{\\mathbb C}","Ebb":"{\\mathbb E}","Hbb":"{\\mathbb H}","Nbb":"{\\mathbb N}","Pbb":"{\\mathbb P}","Qbb":"{\\mathbb Q}","Rbb":"{\\mathbb R}","Zbb":"{\\mathbb Z}","Acal":"{\\mathcal A}","Bcal":"{\\mathcal B}","Ccal":"{\\mathcal C}","Dcal":"{\\mathcal D}","Ecal":"{\\mathcal E}","Fcal":"{\\mathcal F}","Gcal":"{\\mathcal G}","Hcal":"{\\mathcal H}","Ical":"{\\mathcal I}","Lcal":"{\\mathcal L}","Mcal":"{\\mathcal M}","Ncal":"{\\mathcal N}","Pcal":"{\\mathcal P}","Rcal":"{\\mathcal R}","Scal":"{\\mathcal S}","Ucal":"{\\mathcal U}","Vcal":"{\\mathcal V}","Wcal":"{\\mathcal W}","Xcal":"{\\mathcal X}","Ycal":"{\\mathcal Y}","fhat":"{\\hat f}","yhat":"{\\hat y}","yvhat":"{\\hat {\\yv}}","Xvhat":"{\\hat {\\Xv}}","wvt":"{\\tilde {\\wv}}","xvt":"{\\tilde {\\xv}}","yvt":"{\\tilde {\\yv}}","Kvt":"{\\tilde {\\Kv}}","xbar":"{\\bar {x}}","ybar":"{\\bar {y}}","yvbar":"{\\bar {\\yv}}","Ffrak":"{\\mathfrak F}","sup":["{{(#1)}}",1],"diff":"{\\mathrm {d}}","diag":"{\\mathrm {diag}}","span":"{\\mathrm {span}}","sign":"{\\mathrm {sign}}","sgn":"{\\mathrm {sgn}}","st":"{\\mathrm {s.t.}}","VC":"{\\mathrm {VC}}","Pr":"{\\mathrm {Pr}}","tanh":"{\\mathrm {Tanh}}","relu":"{\\mathrm {ReLU}}","lrelu":"{\\mathrm {LeakyReLU}}","prelu":"{\\mathrm {PReLU}}","elu":"{\\mathrm {ELU}}","softplus":"{\\mathrm {Softplus}}","swish":"{\\mathrm {Swish}}","maxout":"{\\mathrm {Maxout}}","const":"{\\mathrm {const}}","cov":"{\\mathrm {cov}}","grad":"{\\mathrm {grad}}","div":"{\\mathrm {div}}","var":"{\\mathrm {var}}","softmax":"{\\mathrm {Softmax}}","att":"{\\mathrm {att}}","cut":"{\\mathrm {cut}}","rcut":"{\\mathrm {RatioCut}}","ncut":"{\\mathrm {NCut}}","tr":"{\\mathrm {tr}}","vol":"{\\mathrm {vol}}","mlp":"{\\mathrm {MLP}}","update":"{\\mathrm {Update}}","aggregate":"{\\mathrm {Aggregate}}","self":"{\\mathrm {self}}","set":"{\\mathrm {set}}","neigh":"{\\mathrm {neigh}}","base":"{\\mathrm {base}}","NULL":"{\\mathrm {NULL}}","new":"{\\mathrm {new}}","gru":"{\\mathrm {GRU}}","lstm":"{\\mathrm {LSTM}}","edge":"{\\mathrm {edge}}","node":"{\\mathrm {node}}","graph":"{\\mathrm {graph}}","train":"{\\mathrm {train}}","dec":"{\\mathrm {Dec}}","sym":"{\\mathrm {sym}}","modd":"{\\mathrm {mod} ~ }","hp":"{\\mathrm {hp}}","gen":"{\\mathrm {gen}}","rot":"{\\mathbf {rot180}}","up":"{\\mathbf {up}}","cen":"{\\mathrm {cen}}","con":"{\\mathrm {con}}","argmin":"{\\mathop{\\mathrm{argmin}}}","argmax":"{\\mathop{\\mathrm{argmax}}}"}},"HTML-CSS":{"linebreaks":{"automatic":false},"scale":100,"styles":{".MathJax_Display":{"margin":"0.6rem auto 1rem 0 !important","border-radius":"0px !important","font-size":"1.8rem !important","color":"#d33682","text-align":"left !important"},".MathJax":{"margin-left":"0.2rem !important","margin-right":"0rem !important","border":"0px solid #ccc !important","color":"#d33682"}},"availableFonts":["TeX"]}});
        </script>
        <script type="text/javascript" async="" src="../common/js/mathjax/MathJax.js" charset="UTF-8"></script>
        
      
      
      
        <script src="../common/js/head.min.js"></script>
        <script src="../common/js/reveal.js"></script>
      <script type="text/javascript" src="../common/js/mermaid/mermaid.min.js" charset="UTF-8"></script>
      
      
      
      
      
      <style>
      /**
 * prism.js Github theme based on GitHub's theme.
 * @author Sam Clarke
 */
code[class*="language-"],
pre[class*="language-"] {
  color: #333;
  background: none;
  font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
  text-align: left;
  white-space: pre;
  word-spacing: normal;
  word-break: normal;
  word-wrap: normal;
  line-height: 1.4;

  -moz-tab-size: 8;
  -o-tab-size: 8;
  tab-size: 8;

  -webkit-hyphens: none;
  -moz-hyphens: none;
  -ms-hyphens: none;
  hyphens: none;
}

/* Code blocks */
pre[class*="language-"] {
  padding: .8em;
  overflow: auto;
  /* border: 1px solid #ddd; */
  border-radius: 3px;
  /* background: #fff; */
  background: #f5f5f5;
}

/* Inline code */
:not(pre) > code[class*="language-"] {
  padding: .1em;
  border-radius: .3em;
  white-space: normal;
  background: #f5f5f5;
}

.token.comment,
.token.blockquote {
  color: #969896;
}

.token.cdata {
  color: #183691;
}

.token.doctype,
.token.punctuation,
.token.variable,
.token.macro.property {
  color: #333;
}

.token.operator,
.token.important,
.token.keyword,
.token.rule,
.token.builtin {
  color: #a71d5d;
}

.token.string,
.token.url,
.token.regex,
.token.attr-value {
  color: #183691;
}

.token.property,
.token.number,
.token.boolean,
.token.entity,
.token.atrule,
.token.constant,
.token.symbol,
.token.command,
.token.code {
  color: #0086b3;
}

.token.tag,
.token.selector,
.token.prolog {
  color: #63a35c;
}

.token.function,
.token.namespace,
.token.pseudo-element,
.token.class,
.token.class-name,
.token.pseudo-class,
.token.id,
.token.url-reference .token.variable,
.token.attr-name {
  color: #795da3;
}

.token.entity {
  cursor: help;
}

.token.title,
.token.title .token.punctuation {
  font-weight: bold;
  color: #1d3e81;
}

.token.list {
  color: #ed6a43;
}

.token.inserted {
  background-color: #eaffea;
  color: #55a532;
}

.token.deleted {
  background-color: #ffecec;
  color: #bd2c00;
}

.token.bold {
  font-weight: bold;
}

.token.italic {
  font-style: italic;
}


/* JSON */
.language-json .token.property {
  color: #183691;
}

.language-markup .token.tag .token.punctuation {
  color: #333;
}

/* CSS */
code.language-css,
.language-css .token.function {
  color: #0086b3;
}

/* YAML */
.language-yaml .token.atrule {
  color: #63a35c;
}

code.language-yaml {
  color: #183691;
}

/* Ruby */
.language-ruby .token.function {
  color: #333;
}

/* Markdown */
.language-markdown .token.url {
  color: #795da3;
}

/* Makefile */
.language-makefile .token.symbol {
  color: #795da3;
}

.language-makefile .token.variable {
  color: #183691;
}

.language-makefile .token.builtin {
  color: #0086b3;
}

/* Bash */
.language-bash .token.keyword {
  color: #0086b3;
}

/* highlight */
pre[data-line] {
  position: relative;
  padding: 1em 0 1em 3em;
}
pre[data-line] .line-highlight-wrapper {
  position: absolute;
  top: 0;
  left: 0;
  background-color: transparent;
  display: block;
  width: 100%;
}

pre[data-line] .line-highlight {
  position: absolute;
  left: 0;
  right: 0;
  padding: inherit 0;
  margin-top: 1em;
  background: hsla(24, 20%, 50%,.08);
  background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
  pointer-events: none;
  line-height: inherit;
  white-space: pre;
}

pre[data-line] .line-highlight:before, 
pre[data-line] .line-highlight[data-end]:after {
  content: attr(data-start);
  position: absolute;
  top: .4em;
  left: .6em;
  min-width: 1em;
  padding: 0 .5em;
  background-color: hsla(24, 20%, 50%,.4);
  color: hsl(24, 20%, 95%);
  font: bold 65%/1.5 sans-serif;
  text-align: center;
  vertical-align: .3em;
  border-radius: 999px;
  text-shadow: none;
  box-shadow: 0 1px white;
}

pre[data-line] .line-highlight[data-end]:after {
  content: attr(data-end);
  top: auto;
  bottom: .4em;
}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for="preview"]) .code-chunk .btn-group{display:none}.markdown-preview:not([for="preview"]) .code-chunk .status{display:none}.markdown-preview:not([for="preview"]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */

      </style>
    </head>
    <body for="html-export" data-presentation-mode="">
      <div class="mume markdown-preview  " data-presentation-mode="">
      
    <div style="display:none;"><link rel="stylesheet" href="../common/css/font-awesome-4.7.0/css/font-awesome.css">
<link rel="stylesheet" href="../common/css/style-color.css">
<link rel="stylesheet" href="../common/css/margin.css">
</div>
    <div class="reveal">
      <div class="slides">
        <section><section data-notes="" lineno="11" class="slide " data-line="11" data-h="0" data-v="0">
<div class="header"><img class="hust" src=""></div>
<div class="bottom15"></div>
<h1 class="mume-header" id="%E5%9B%BE%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E5%AF%BC%E8%AE%BA">图神经网络导论</h1>

<hr class="width50">
<h2 class="mume-header" id="%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0-%E4%B8%8A">机器学习 上</h2>

<div class="bottom5"></div>
<h3 class="mume-header" id="%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF%E5%AD%A6%E9%99%A2-nbsp-nbsp-%E5%BC%A0%E8%85%BE">计算机科学与技术学院 &nbsp; &nbsp; 张腾</h3>

<br>
<h4 class="mume-header" id="tengzhanghusteducn"><a href="mailto:tengzhang@hust.edu.cn">tengzhang@hust.edu.cn</a></h4>

</section><section vertical="true" data-notes="" lineno="30" class="slide " data-line="30" data-h="0" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>大纲</h5></div></div>
<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->

<!-- Generated by graphviz version 2.40.1 (20161225.0304)
 -->
<!-- Title: g Pages: 1 -->
<svg width="465pt" height="394pt" viewBox="0.00 0.00 465.27 394.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 390)">
<title>g</title>
<!-- 人工智能 -->
<g id="node1" class="node">
<title>人工智能</title>
<text text-anchor="middle" x="48.34" y="-238.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">人工智能</text>
</g>
<!-- 逻辑推理 -->
<g id="node2" class="node">
<title>逻辑推理</title>
<text text-anchor="middle" x="169.8136" y="-288.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">逻辑推理</text>
</g>
<!-- 人工智能&#45;&gt;逻辑推理 -->
<g id="edge1" class="edge">
<title>人工智能-&gt;逻辑推理</title>
<path fill="none" stroke="#586e75" d="M92.1948,-261.0511C101.8894,-265.0416 112.2075,-269.2886 122.0489,-273.3395"></path>
<polygon fill="#586e75" stroke="#586e75" points="126.837,-275.3103 121.3569,-275.4877 124.5252,-274.3587 122.2133,-273.4071 122.2133,-273.4071 122.2133,-273.4071 124.5252,-274.3587 123.0698,-271.3265 126.837,-275.3103 126.837,-275.3103"></polygon>
</g>
<!-- 知识工程 -->
<g id="node3" class="node">
<title>知识工程</title>
<text text-anchor="middle" x="169.8136" y="-238.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">知识工程</text>
</g>
<!-- 人工智能&#45;&gt;知识工程 -->
<g id="edge2" class="edge">
<title>人工智能-&gt;知识工程</title>
<path fill="none" stroke="#586e75" d="M96.6986,-243C104.4396,-243 112.4607,-243 120.2297,-243"></path>
<polygon fill="#586e75" stroke="#586e75" points="125.5615,-243 120.5615,-245.2501 123.0615,-243 120.5615,-243.0001 120.5615,-243.0001 120.5615,-243.0001 123.0615,-243 120.5614,-240.7501 125.5615,-243 125.5615,-243"></polygon>
</g>
<!-- 机器学习 -->
<g id="node4" class="node">
<title>机器学习</title>
<text text-anchor="middle" x="169.8136" y="-188.2" font-family="EBG,fzlz" font-size="16.00" fill="#dc322f">机器学习</text>
</g>
<!-- 人工智能&#45;&gt;机器学习 -->
<g id="edge3" class="edge">
<title>人工智能-&gt;机器学习</title>
<path fill="none" stroke="#586e75" d="M92.1948,-224.9489C102.9205,-220.534 114.4092,-215.8051 125.1713,-211.3753"></path>
<polygon fill="#586e75" stroke="#586e75" points="130.0596,-209.3632 126.2924,-213.3471 127.7478,-210.3148 125.436,-211.2664 125.436,-211.2664 125.436,-211.2664 127.7478,-210.3148 124.5795,-209.1858 130.0596,-209.3632 130.0596,-209.3632"></polygon>
</g>
<!-- 监督信息 -->
<g id="node5" class="node">
<title>监督信息</title>
<text text-anchor="middle" x="281.6088" y="-288.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">监督信息</text>
</g>
<!-- 机器学习&#45;&gt;监督信息 -->
<g id="edge4" class="edge">
<title>机器学习-&gt;监督信息</title>
<path fill="none" stroke="#586e75" d="M204.2661,-211.0501C207.6378,-213.2458 210.9249,-215.5754 213.9472,-218 233.367,-233.5789 252.0565,-254.9445 264.8533,-270.8874"></path>
<polygon fill="#586e75" stroke="#586e75" points="267.9767,-274.817 263.1041,-272.3028 266.4211,-272.8599 264.8655,-270.9027 264.8655,-270.9027 264.8655,-270.9027 266.4211,-272.8599 266.6269,-269.5027 267.9767,-274.817 267.9767,-274.817"></polygon>
</g>
<!-- 模型方法 -->
<g id="node6" class="node">
<title>模型方法</title>
<text text-anchor="middle" x="281.6088" y="-138.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">模型方法</text>
</g>
<!-- 机器学习&#45;&gt;模型方法 -->
<g id="edge5" class="edge">
<title>机器学习-&gt;模型方法</title>
<path fill="none" stroke="#586e75" d="M209.5432,-175.2311C218.9278,-171.0339 228.9776,-166.5391 238.5037,-162.2786"></path>
<polygon fill="#586e75" stroke="#586e75" points="243.1328,-160.2083 239.4871,-164.3036 240.8506,-161.229 238.5685,-162.2497 238.5685,-162.2497 238.5685,-162.2497 240.8506,-161.229 237.6498,-160.1957 243.1328,-160.2083 243.1328,-160.2083"></polygon>
</g>
<!-- 监督学习 -->
<g id="node7" class="node">
<title>监督学习</title>
<text text-anchor="middle" x="403.2688" y="-363.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">监督学习</text>
</g>
<!-- 监督信息&#45;&gt;监督学习 -->
<g id="edge6" class="edge">
<title>监督信息-&gt;监督学习</title>
<path fill="none" stroke="#586e75" d="M303.6799,-311.0886C316.5358,-321.1632 333.3126,-333.5426 349.2704,-343 352.8475,-345.12 356.6346,-347.1913 360.4773,-349.1769"></path>
<polygon fill="#586e75" stroke="#586e75" points="365.0045,-351.4662 359.5272,-351.2178 362.7735,-350.338 360.5425,-349.2099 360.5425,-349.2099 360.5425,-349.2099 362.7735,-350.338 361.5579,-347.202 365.0045,-351.4662 365.0045,-351.4662"></polygon>
</g>
<!-- 半监督学习 -->
<g id="node8" class="node">
<title>半监督学习</title>
<text text-anchor="middle" x="403.2688" y="-313.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">半监督学习</text>
</g>
<!-- 监督信息&#45;&gt;半监督学习 -->
<g id="edge7" class="edge">
<title>监督信息-&gt;半监督学习</title>
<path fill="none" stroke="#586e75" d="M320.4373,-300.9789C331.0509,-303.1599 342.6972,-305.5531 353.8175,-307.8382"></path>
<polygon fill="#586e75" stroke="#586e75" points="358.8842,-308.8794 353.5336,-310.0768 356.4353,-308.3761 353.9865,-307.8729 353.9865,-307.8729 353.9865,-307.8729 356.4353,-308.3761 354.4394,-305.6689 358.8842,-308.8794 358.8842,-308.8794"></polygon>
</g>
<!-- 无监督学习 -->
<g id="node9" class="node">
<title>无监督学习</title>
<text text-anchor="middle" x="403.2688" y="-263.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">无监督学习</text>
</g>
<!-- 监督信息&#45;&gt;无监督学习 -->
<g id="edge8" class="edge">
<title>监督信息-&gt;无监督学习</title>
<path fill="none" stroke="#586e75" d="M320.4373,-285.0211C331.0509,-282.8401 342.6972,-280.4469 353.8175,-278.1618"></path>
<polygon fill="#586e75" stroke="#586e75" points="358.8842,-277.1206 354.4394,-280.3311 356.4353,-277.6239 353.9865,-278.1271 353.9865,-278.1271 353.9865,-278.1271 356.4353,-277.6239 353.5336,-275.9232 358.8842,-277.1206 358.8842,-277.1206"></polygon>
</g>
<!-- 线性回归 -->
<g id="node10" class="node">
<title>线性回归</title>
<text text-anchor="middle" x="403.2688" y="-213.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">线性回归</text>
</g>
<!-- 模型方法&#45;&gt;线性回归 -->
<g id="edge9" class="edge">
<title>模型方法-&gt;线性回归</title>
<path fill="none" stroke="#586e75" d="M303.6799,-161.0886C316.5358,-171.1632 333.3126,-183.5426 349.2704,-193 351.7699,-194.4813 354.372,-195.9389 357.0239,-197.3601"></path>
<polygon fill="#586e75" stroke="#586e75" points="361.8398,-199.8763 356.3662,-199.5551 359.624,-198.7186 357.4082,-197.5609 357.4082,-197.5609 357.4082,-197.5609 359.624,-198.7186 358.4501,-195.5666 361.8398,-199.8763 361.8398,-199.8763"></polygon>
</g>
<!-- 感知机 -->
<g id="node11" class="node">
<title>感知机</title>
<text text-anchor="middle" x="403.2688" y="-163.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">感知机</text>
</g>
<!-- 模型方法&#45;&gt;感知机 -->
<g id="edge10" class="edge">
<title>模型方法-&gt;感知机</title>
<path fill="none" stroke="#586e75" d="M320.1028,-150.9102C335.6137,-154.0975 353.3747,-157.7472 368.4899,-160.8533"></path>
<polygon fill="#586e75" stroke="#586e75" points="373.5074,-161.8843 368.1568,-163.0818 371.0586,-161.3811 368.6098,-160.8778 368.6098,-160.8778 368.6098,-160.8778 371.0586,-161.3811 369.0627,-158.6739 373.5074,-161.8843 373.5074,-161.8843"></polygon>
</g>
<!-- 支持向量机 -->
<g id="node12" class="node">
<title>支持向量机</title>
<text text-anchor="middle" x="403.2688" y="-113.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">支持向量机</text>
</g>
<!-- 模型方法&#45;&gt;支持向量机 -->
<g id="edge11" class="edge">
<title>模型方法-&gt;支持向量机</title>
<path fill="none" stroke="#586e75" d="M320.1028,-135.0898C330.3655,-132.981 341.6131,-130.6697 352.4278,-128.4474"></path>
<polygon fill="#586e75" stroke="#586e75" points="357.3611,-127.4336 352.9163,-130.6441 354.9122,-127.9369 352.4634,-128.4401 352.4634,-128.4401 352.4634,-128.4401 354.9122,-127.9369 352.0105,-126.2362 357.3611,-127.4336 357.3611,-127.4336"></polygon>
</g>
<!-- 对数几率回归 -->
<g id="node13" class="node">
<title>对数几率回归</title>
<text text-anchor="middle" x="403.2688" y="-63.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">对数几率回归</text>
</g>
<!-- 模型方法&#45;&gt;对数几率回归 -->
<g id="edge12" class="edge">
<title>模型方法-&gt;对数几率回归</title>
<path fill="none" stroke="#586e75" d="M303.6799,-124.9114C316.5358,-114.8368 333.3126,-102.4574 349.2704,-93 351.7699,-91.5187 354.372,-90.0611 357.0239,-88.6399"></path>
<polygon fill="#586e75" stroke="#586e75" points="361.8398,-86.1237 358.4501,-90.4334 359.624,-87.2814 357.4082,-88.4391 357.4082,-88.4391 357.4082,-88.4391 359.624,-87.2814 356.3662,-86.4449 361.8398,-86.1237 361.8398,-86.1237"></polygon>
</g>
<!-- 神经网络 -->
<g id="node14" class="node">
<title>神经网络</title>
<text text-anchor="middle" x="403.2688" y="-13.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">神经网络</text>
</g>
<!-- 模型方法&#45;&gt;神经网络 -->
<g id="edge13" class="edge">
<title>模型方法-&gt;神经网络</title>
<path fill="none" stroke="#586e75" d="M290.0026,-124.9279C300.9487,-103.0392 321.9653,-66.2221 349.2704,-43 351.0927,-41.4502 353.0271,-39.9762 355.0385,-38.577"></path>
<polygon fill="#586e75" stroke="#586e75" points="359.2639,-35.8097 356.3139,-40.4314 357.1725,-37.1794 355.0811,-38.5492 355.0811,-38.5492 355.0811,-38.5492 357.1725,-37.1794 353.8484,-36.6669 359.2639,-35.8097 359.2639,-35.8097"></polygon>
</g>
</g>
</svg>
</p><div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section><section data-notes="" lineno="38" class="slide " data-line="38" data-h="1" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>大纲</h5></div></div>
<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->

<!-- Generated by graphviz version 2.40.1 (20161225.0304)
 -->
<!-- Title: g Pages: 1 -->
<svg width="465pt" height="394pt" viewBox="0.00 0.00 465.27 394.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 390)">
<title>g</title>
<!-- 人工智能 -->
<g id="node1" class="node">
<title>人工智能</title>
<text text-anchor="middle" x="48.34" y="-238.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">人工智能</text>
</g>
<!-- 逻辑推理 -->
<g id="node2" class="node">
<title>逻辑推理</title>
<text text-anchor="middle" x="169.8136" y="-288.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">逻辑推理</text>
</g>
<!-- 人工智能&#45;&gt;逻辑推理 -->
<g id="edge1" class="edge">
<title>人工智能-&gt;逻辑推理</title>
<path fill="none" stroke="#586e75" d="M92.1948,-261.0511C101.8894,-265.0416 112.2075,-269.2886 122.0489,-273.3395"></path>
<polygon fill="#586e75" stroke="#586e75" points="126.837,-275.3103 121.3569,-275.4877 124.5252,-274.3587 122.2133,-273.4071 122.2133,-273.4071 122.2133,-273.4071 124.5252,-274.3587 123.0698,-271.3265 126.837,-275.3103 126.837,-275.3103"></polygon>
</g>
<!-- 知识工程 -->
<g id="node3" class="node">
<title>知识工程</title>
<text text-anchor="middle" x="169.8136" y="-238.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">知识工程</text>
</g>
<!-- 人工智能&#45;&gt;知识工程 -->
<g id="edge2" class="edge">
<title>人工智能-&gt;知识工程</title>
<path fill="none" stroke="#586e75" d="M96.6986,-243C104.4396,-243 112.4607,-243 120.2297,-243"></path>
<polygon fill="#586e75" stroke="#586e75" points="125.5615,-243 120.5615,-245.2501 123.0615,-243 120.5615,-243.0001 120.5615,-243.0001 120.5615,-243.0001 123.0615,-243 120.5614,-240.7501 125.5615,-243 125.5615,-243"></polygon>
</g>
<!-- 机器学习 -->
<g id="node4" class="node">
<title>机器学习</title>
<text text-anchor="middle" x="169.8136" y="-188.2" font-family="EBG,fzlz" font-size="16.00" fill="#dc322f">机器学习</text>
</g>
<!-- 人工智能&#45;&gt;机器学习 -->
<g id="edge3" class="edge">
<title>人工智能-&gt;机器学习</title>
<path fill="none" stroke="#586e75" d="M92.1948,-224.9489C102.9205,-220.534 114.4092,-215.8051 125.1713,-211.3753"></path>
<polygon fill="#586e75" stroke="#586e75" points="130.0596,-209.3632 126.2924,-213.3471 127.7478,-210.3148 125.436,-211.2664 125.436,-211.2664 125.436,-211.2664 127.7478,-210.3148 124.5795,-209.1858 130.0596,-209.3632 130.0596,-209.3632"></polygon>
</g>
<!-- 监督信息 -->
<g id="node5" class="node">
<title>监督信息</title>
<text text-anchor="middle" x="281.6088" y="-288.2" font-family="EBG,fzlz" font-size="16.00" fill="#93a1a1">监督信息</text>
</g>
<!-- 机器学习&#45;&gt;监督信息 -->
<g id="edge4" class="edge">
<title>机器学习-&gt;监督信息</title>
<path fill="none" stroke="#93a1a1" d="M204.2661,-211.0501C207.6378,-213.2458 210.9249,-215.5754 213.9472,-218 233.367,-233.5789 252.0565,-254.9445 264.8533,-270.8874"></path>
<polygon fill="#93a1a1" stroke="#93a1a1" points="267.9767,-274.817 263.1041,-272.3028 266.4211,-272.8599 264.8655,-270.9027 264.8655,-270.9027 264.8655,-270.9027 266.4211,-272.8599 266.6269,-269.5027 267.9767,-274.817 267.9767,-274.817"></polygon>
</g>
<!-- 模型方法 -->
<g id="node6" class="node">
<title>模型方法</title>
<text text-anchor="middle" x="281.6088" y="-138.2" font-family="EBG,fzlz" font-size="16.00" fill="#93a1a1">模型方法</text>
</g>
<!-- 机器学习&#45;&gt;模型方法 -->
<g id="edge5" class="edge">
<title>机器学习-&gt;模型方法</title>
<path fill="none" stroke="#93a1a1" d="M209.5432,-175.2311C218.9278,-171.0339 228.9776,-166.5391 238.5037,-162.2786"></path>
<polygon fill="#93a1a1" stroke="#93a1a1" points="243.1328,-160.2083 239.4871,-164.3036 240.8506,-161.229 238.5685,-162.2497 238.5685,-162.2497 238.5685,-162.2497 240.8506,-161.229 237.6498,-160.1957 243.1328,-160.2083 243.1328,-160.2083"></polygon>
</g>
<!-- 监督学习 -->
<g id="node7" class="node">
<title>监督学习</title>
<text text-anchor="middle" x="403.2688" y="-363.2" font-family="EBG,fzlz" font-size="16.00" fill="#93a1a1">监督学习</text>
</g>
<!-- 监督信息&#45;&gt;监督学习 -->
<g id="edge6" class="edge">
<title>监督信息-&gt;监督学习</title>
<path fill="none" stroke="#93a1a1" d="M303.6799,-311.0886C316.5358,-321.1632 333.3126,-333.5426 349.2704,-343 352.8475,-345.12 356.6346,-347.1913 360.4773,-349.1769"></path>
<polygon fill="#93a1a1" stroke="#93a1a1" points="365.0045,-351.4662 359.5272,-351.2178 362.7735,-350.338 360.5425,-349.2099 360.5425,-349.2099 360.5425,-349.2099 362.7735,-350.338 361.5579,-347.202 365.0045,-351.4662 365.0045,-351.4662"></polygon>
</g>
<!-- 半监督学习 -->
<g id="node8" class="node">
<title>半监督学习</title>
<text text-anchor="middle" x="403.2688" y="-313.2" font-family="EBG,fzlz" font-size="16.00" fill="#93a1a1">半监督学习</text>
</g>
<!-- 监督信息&#45;&gt;半监督学习 -->
<g id="edge7" class="edge">
<title>监督信息-&gt;半监督学习</title>
<path fill="none" stroke="#93a1a1" d="M320.4373,-300.9789C331.0509,-303.1599 342.6972,-305.5531 353.8175,-307.8382"></path>
<polygon fill="#93a1a1" stroke="#93a1a1" points="358.8842,-308.8794 353.5336,-310.0768 356.4353,-308.3761 353.9865,-307.8729 353.9865,-307.8729 353.9865,-307.8729 356.4353,-308.3761 354.4394,-305.6689 358.8842,-308.8794 358.8842,-308.8794"></polygon>
</g>
<!-- 无监督学习 -->
<g id="node9" class="node">
<title>无监督学习</title>
<text text-anchor="middle" x="403.2688" y="-263.2" font-family="EBG,fzlz" font-size="16.00" fill="#93a1a1">无监督学习</text>
</g>
<!-- 监督信息&#45;&gt;无监督学习 -->
<g id="edge8" class="edge">
<title>监督信息-&gt;无监督学习</title>
<path fill="none" stroke="#93a1a1" d="M320.4373,-285.0211C331.0509,-282.8401 342.6972,-280.4469 353.8175,-278.1618"></path>
<polygon fill="#93a1a1" stroke="#93a1a1" points="358.8842,-277.1206 354.4394,-280.3311 356.4353,-277.6239 353.9865,-278.1271 353.9865,-278.1271 353.9865,-278.1271 356.4353,-277.6239 353.5336,-275.9232 358.8842,-277.1206 358.8842,-277.1206"></polygon>
</g>
<!-- 线性回归 -->
<g id="node10" class="node">
<title>线性回归</title>
<text text-anchor="middle" x="403.2688" y="-213.2" font-family="EBG,fzlz" font-size="16.00" fill="#93a1a1">线性回归</text>
</g>
<!-- 模型方法&#45;&gt;线性回归 -->
<g id="edge9" class="edge">
<title>模型方法-&gt;线性回归</title>
<path fill="none" stroke="#93a1a1" d="M303.6799,-161.0886C316.5358,-171.1632 333.3126,-183.5426 349.2704,-193 351.7699,-194.4813 354.372,-195.9389 357.0239,-197.3601"></path>
<polygon fill="#93a1a1" stroke="#93a1a1" points="361.8398,-199.8763 356.3662,-199.5551 359.624,-198.7186 357.4082,-197.5609 357.4082,-197.5609 357.4082,-197.5609 359.624,-198.7186 358.4501,-195.5666 361.8398,-199.8763 361.8398,-199.8763"></polygon>
</g>
<!-- 感知机 -->
<g id="node11" class="node">
<title>感知机</title>
<text text-anchor="middle" x="403.2688" y="-163.2" font-family="EBG,fzlz" font-size="16.00" fill="#93a1a1">感知机</text>
</g>
<!-- 模型方法&#45;&gt;感知机 -->
<g id="edge10" class="edge">
<title>模型方法-&gt;感知机</title>
<path fill="none" stroke="#93a1a1" d="M320.1028,-150.9102C335.6137,-154.0975 353.3747,-157.7472 368.4899,-160.8533"></path>
<polygon fill="#93a1a1" stroke="#93a1a1" points="373.5074,-161.8843 368.1568,-163.0818 371.0586,-161.3811 368.6098,-160.8778 368.6098,-160.8778 368.6098,-160.8778 371.0586,-161.3811 369.0627,-158.6739 373.5074,-161.8843 373.5074,-161.8843"></polygon>
</g>
<!-- 支持向量机 -->
<g id="node12" class="node">
<title>支持向量机</title>
<text text-anchor="middle" x="403.2688" y="-113.2" font-family="EBG,fzlz" font-size="16.00" fill="#93a1a1">支持向量机</text>
</g>
<!-- 模型方法&#45;&gt;支持向量机 -->
<g id="edge11" class="edge">
<title>模型方法-&gt;支持向量机</title>
<path fill="none" stroke="#93a1a1" d="M320.1028,-135.0898C330.3655,-132.981 341.6131,-130.6697 352.4278,-128.4474"></path>
<polygon fill="#93a1a1" stroke="#93a1a1" points="357.3611,-127.4336 352.9163,-130.6441 354.9122,-127.9369 352.4634,-128.4401 352.4634,-128.4401 352.4634,-128.4401 354.9122,-127.9369 352.0105,-126.2362 357.3611,-127.4336 357.3611,-127.4336"></polygon>
</g>
<!-- 对数几率回归 -->
<g id="node13" class="node">
<title>对数几率回归</title>
<text text-anchor="middle" x="403.2688" y="-63.2" font-family="EBG,fzlz" font-size="16.00" fill="#93a1a1">对数几率回归</text>
</g>
<!-- 模型方法&#45;&gt;对数几率回归 -->
<g id="edge12" class="edge">
<title>模型方法-&gt;对数几率回归</title>
<path fill="none" stroke="#93a1a1" d="M303.6799,-124.9114C316.5358,-114.8368 333.3126,-102.4574 349.2704,-93 351.7699,-91.5187 354.372,-90.0611 357.0239,-88.6399"></path>
<polygon fill="#93a1a1" stroke="#93a1a1" points="361.8398,-86.1237 358.4501,-90.4334 359.624,-87.2814 357.4082,-88.4391 357.4082,-88.4391 357.4082,-88.4391 359.624,-87.2814 356.3662,-86.4449 361.8398,-86.1237 361.8398,-86.1237"></polygon>
</g>
<!-- 神经网络 -->
<g id="node14" class="node">
<title>神经网络</title>
<text text-anchor="middle" x="403.2688" y="-13.2" font-family="EBG,fzlz" font-size="16.00" fill="#93a1a1">神经网络</text>
</g>
<!-- 模型方法&#45;&gt;神经网络 -->
<g id="edge13" class="edge">
<title>模型方法-&gt;神经网络</title>
<path fill="none" stroke="#93a1a1" d="M290.0026,-124.9279C300.9487,-103.0392 321.9653,-66.2221 349.2704,-43 351.0927,-41.4502 353.0271,-39.9762 355.0385,-38.577"></path>
<polygon fill="#93a1a1" stroke="#93a1a1" points="359.2639,-35.8097 356.3139,-40.4314 357.1725,-37.1794 355.0811,-38.5492 355.0811,-38.5492 355.0811,-38.5492 357.1725,-37.1794 353.8484,-36.6669 359.2639,-35.8097 359.2639,-35.8097"></polygon>
</g>
</g>
</svg>
</p><div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="46" class="slide " data-line="46" data-h="1" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>背景</h5></div></div>
<br>
<p>维纳 《控制论》：</p>
<br>
<blockquote>
<p>第一次工业革命：用某种机器来减轻甚至代替<span class="blue">体力</span>劳动</p>
</blockquote>
<blockquote>
<p>上世纪中叶：用某种新型机器来减轻甚至代替某些<span class="blue">脑力</span>劳动</p>
</blockquote>
<br>
<p>关键：让机器具有人类的智能</p>
<br>
<p>问题：什么是智能？</p>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="70" class="slide " data-line="70" data-h="1" data-v="2">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>起源</h5></div></div>
<p>《Computing Machinery and Intelligence》</p>
<div class="width62 left0 right0 top2 bottom2">
<p>图灵在他 1950 年的这篇论文中提出了<span class="blue">图灵测试</span>：一个人在不接触对方的情况下，通过一种特殊的方式，和对方进行一系列的问答，如果在相当长时间内，他无法根据这些问题判断对方是人还是计算机，那么就可以认为这个计算机是智能的</p>
</div>
<p>要想通过图灵测试，机器得具备多种能力</p>
<ul>
<li>学习：机器学习</li>
<li>感知：计算机视觉，语音识别</li>
<li>认知：自然语言处理，知识表示</li>
</ul>
<img src="../common/img/turing.jpg" title="图灵" style="margin-right:4rem;margin-left:auto;margin-top:-28rem;width:30%">
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="92" class="slide " data-line="92" data-h="1" data-v="3">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>元年</h5></div></div>
<p>达特茅斯会议</p>
<ul>
<li>时间：1956 年</li>
<li>地点：达特茅斯学院</li>
<li>人物：香农、麦卡锡、明斯基、西蒙、纽厄尔等十人</li>
<li>事件：讨论用机器模拟人的智能</li>
</ul>
<br>
<div class="multi_column top_2">
    <img src="../common/img/birth-school.jpg" title="达特茅斯学院" width="425px" height="277px" style="margin-left:3rem">
    <img src="../common/img/birth-people.jpg" title="2006年会议50周年时还健在的5位参会者" width="425px" height="277px" style="margin-right:3rem;margin-left:auto">
</div>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="112" class="slide " data-line="112" data-h="1" data-v="4">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>发展</h5></div></div>
<div class="mermaid">gantt
todayMarker off
dateFormat YYYY
axisFormat %Y
title 人工智能的三次浪潮

section 史前文明

推理期: done, 1950, 1965
1950 图灵测试: 1950, milestone
1956 达特茅斯会议: 1956, milestone

知识期: done, 1969, 1987
1969 知识系统兴起: 1969, milestone
1980 专家系统兴起: 1980, milestone

学习期: active, 1985, 2021
1995 统计学习兴起: 1995, milestone
2012 深度学习兴起: 2012, milestone
</div><p>秽土转生</p>
<ul>
<li>推理：反绎学习，图神经网络</li>
<li>知识：知识图谱，图神经网络</li>
</ul>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section><section data-notes="" lineno="125" class="slide " data-line="125" data-h="2" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>推理期</h5></div></div>
<p>机器擅长固定套路的计算 vs. 人类擅长妙手偶得的推理</p>
<div class="bottom4"></div>
<p>符号主义：<span class="blue">智能 = 逻辑推理</span></p>
<div class="bottom4"></div>
<p>西蒙和纽厄尔设计了<span class="blue">逻辑理论家</span>程序</p>
<ul>
<li>1952 年，逻辑理论家证明了 《数学原理》 中的 38 条定理</li>
<li>1963 年，证明了全部 52 条定理，其中定理 2.85 的证明比原书作者更巧妙</li>
<li>西蒙和纽厄尔获得了 1975 年的图灵奖</li>
</ul>
<div class="bottom4"></div>
<p>衰退：</p>
<ul>
<li>并非所有定理都可以方便地符号化，也并非所有问题都可以转换成推理问题</li>
<li>十万步内无法证明<span class="blue">两个连续函数之和还是连续函数</span></li>
</ul>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="152" class="slide " data-line="152" data-h="2" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>符号主义</h5></div></div>
<p>根据以下事实判别谁说了实话</p>
<ul>
<li><span class="mathjax-exps">$A$</span>：<span class="mathjax-exps">$B$</span>和<span class="mathjax-exps">$C$</span>都是说谎者</li>
<li><span class="mathjax-exps">$B$</span>：<span class="mathjax-exps">$A$</span>和<span class="mathjax-exps">$C$</span>都是说谎者</li>
<li><span class="mathjax-exps">$C$</span>：<span class="mathjax-exps">$A$</span>和<span class="mathjax-exps">$B$</span>中至少有一个说谎者</li>
</ul>
<div class="threelines row7-border-top-solid column1-border-right-solid">
<table>
<thead>
<tr>
<th style="text-align:center">公式</th>
<th style="text-align:center"><span class="mathjax-exps">$p \rightarrow q$</span></th>
<th style="text-align:center"><span class="mathjax-exps">$\Longleftrightarrow$</span></th>
<th style="text-align:center"><span class="mathjax-exps">$\neg p \vee q$</span></th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center"><strong>条件</strong></td>
<td style="text-align:center"><span class="mathjax-exps">$A \rightarrow \neg B \wedge \neg C$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$\Longleftrightarrow$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$1.~\neg A \vee \neg B, \quad 2.~\neg A \vee \neg C$</span></td>
</tr>
<tr>
<td style="text-align:center"></td>
<td style="text-align:center"><span class="mathjax-exps">$\neg A \rightarrow B \vee C$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$\Longleftrightarrow$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$3.~A \vee B \vee C$</span></td>
</tr>
<tr>
<td style="text-align:center"></td>
<td style="text-align:center"><span class="mathjax-exps">$B \rightarrow \neg A \wedge \neg C$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$\Longleftrightarrow$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$4.~\neg B \vee \neg C$</span></td>
</tr>
<tr>
<td style="text-align:center"></td>
<td style="text-align:center"><span class="mathjax-exps">$\neg B \rightarrow A \vee C$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$\Longleftrightarrow$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$3.~A \vee B \vee C$</span></td>
</tr>
<tr>
<td style="text-align:center"></td>
<td style="text-align:center"><span class="mathjax-exps">$C \rightarrow \neg A \vee \neg B$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$\Longleftrightarrow$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$5.~\neg A \vee \neg B \vee \neg C$</span></td>
</tr>
<tr>
<td style="text-align:center"></td>
<td style="text-align:center"><span class="mathjax-exps">$\neg C \rightarrow A \wedge B$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$\Longleftrightarrow$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$6.~A \vee C, \quad 7.~B \vee C$</span></td>
</tr>
<tr>
<td style="text-align:center"><strong>归结</strong></td>
<td style="text-align:center"><span class="mathjax-exps">$1 + 7 \rightarrow 8.~\neg A \vee C$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$\Longleftrightarrow$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$C$</span>说了实话</td>
</tr>
</tbody>
</table>
</div>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="178" class="slide " data-line="178" data-h="2" data-v="2">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>知识期</h5></div></div>
<p>教训：光有逻辑推理远远不够，机器得拥有知识</p>
<div class="bottom4"></div>
<p>信仰：知识就是力量，<span class="blue">智能 = 知识 + 逻辑推理</span></p>
<div class="bottom4"></div>
<p>专家系统 = 知识库 + 推理机</p>
<ul>
<li>在特定领域内具有专家水平解决问题能力的程序系统</li>
<li>第一个成功的专家系统 DENDRAL 于 1968 年问世</li>
<li>知识工程之父费根鲍姆获得了 1994 年的图灵奖</li>
</ul>
<div class="bottom4"></div>
<p>衰退：</p>
<ul>
<li>人工构建知识库成本太高</li>
<li>很多知识获取困难，甚至无法被清晰地表示出来</li>
</ul>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="205" class="slide " data-line="205" data-h="2" data-v="3">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>动物识别专家系统</h5></div></div>
<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->

<!-- Generated by graphviz version 2.40.1 (20161225.0304)
 -->
<!-- Title: g Pages: 1 -->
<svg width="644pt" height="383pt" viewBox="0.00 0.00 644.00 382.57" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 378.5665)">
<title>g</title>
<g id="clust1" class="cluster">
<title>cluster_0</title>
<polygon fill="transparent" stroke="#586e75" stroke-dasharray="5,2" points="8,-8 8,-366.5665 390,-366.5665 390,-8 8,-8"></polygon>
<text text-anchor="middle" x="199" y="-349.9665" font-family="EBG,fzlz" font-size="14.00" fill="#d33682">知识库</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_1</title>
<polygon fill="transparent" stroke="#586e75" stroke-dasharray="5,2" points="398,-196.8666 398,-366.5665 628,-366.5665 628,-196.8666 398,-196.8666"></polygon>
<text text-anchor="middle" x="513" y="-349.9665" font-family="EBG,fzlz" font-size="14.00" fill="#d33682">推理</text>
</g>
<!-- 是否冷血 -->
<g id="node1" class="node">
<title>是否冷血</title>
<ellipse fill="none" stroke="#586e75" cx="228" cy="-314.5332" rx="57.8914" ry="19.4695"></ellipse>
<text text-anchor="middle" x="228" y="-309.7332" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">是否冷血</text>
</g>
<!-- 是否有羽毛 -->
<g id="node2" class="node">
<title>是否有羽毛</title>
<ellipse fill="none" stroke="#586e75" cx="152" cy="-222.8666" rx="71.9511" ry="19.4695"></ellipse>
<text text-anchor="middle" x="152" y="-218.0666" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">是否有羽毛</text>
</g>
<!-- 是否冷血&#45;&gt;是否有羽毛 -->
<g id="edge1" class="edge">
<title>是否冷血-&gt;是否有羽毛</title>
<path fill="none" stroke="#586e75" d="M212.6203,-295.9831C200.7494,-281.6652 184.248,-261.7622 171.4585,-246.3362"></path>
<polygon fill="#586e75" stroke="#586e75" points="167.6177,-241.7038 173.5258,-244.5994 169.5325,-244.0132 171.4473,-246.3227 171.4473,-246.3227 171.4473,-246.3227 169.5325,-244.0132 169.3687,-248.046 167.6177,-241.7038 167.6177,-241.7038"></polygon>
<text text-anchor="middle" x="205" y="-263.8999" font-family="EBG,fzlz" font-size="16.00" fill="#dc322f">否</text>
</g>
<!-- 是否有腿 -->
<g id="node3" class="node">
<title>是否有腿</title>
<ellipse fill="none" stroke="#586e75" cx="304" cy="-222.8666" rx="57.6425" ry="19.4695"></ellipse>
<text text-anchor="middle" x="304" y="-218.0666" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">是否有腿</text>
</g>
<!-- 是否冷血&#45;&gt;是否有腿 -->
<g id="edge2" class="edge">
<title>是否冷血-&gt;是否有腿</title>
<path fill="none" stroke="#586e75" d="M243.3797,-295.9831C255.2506,-281.6652 271.752,-261.7622 284.5415,-246.3362"></path>
<polygon fill="#586e75" stroke="#586e75" points="288.3823,-241.7038 286.6313,-248.046 286.4675,-244.0132 284.5527,-246.3227 284.5527,-246.3227 284.5527,-246.3227 286.4675,-244.0132 282.4742,-244.5994 288.3823,-241.7038 288.3823,-241.7038"></polygon>
<text text-anchor="middle" x="281.4472" y="-263.8999" font-family="EBG,fzlz" font-size="16.00" fill="#dc322f">是</text>
</g>
<!-- 是否会飞 -->
<g id="node4" class="node">
<title>是否会飞</title>
<ellipse fill="none" stroke="#586e75" cx="84" cy="-124.4333" rx="68.3941" ry="19.4695"></ellipse>
<text text-anchor="middle" x="84" y="-119.6333" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">是否会飞</text>
</g>
<!-- 是否有羽毛&#45;&gt;是否会飞 -->
<g id="edge3" class="edge">
<title>是否有羽毛-&gt;是否会飞</title>
<path fill="none" stroke="#586e75" d="M138.8889,-203.8877C127.9765,-188.0915 112.377,-165.5104 100.5953,-148.4557"></path>
<polygon fill="#586e75" stroke="#586e75" points="97.0708,-143.354 102.7026,-146.7559 98.776,-145.8223 100.4812,-148.2906 100.4812,-148.2906 100.4812,-148.2906 98.776,-145.8223 98.2597,-149.8252 97.0708,-143.354 97.0708,-143.354"></polygon>
<text text-anchor="middle" x="129.4472" y="-165.4666" font-family="EBG,fzlz" font-size="16.00" fill="#dc322f">是</text>
</g>
<!-- 猫 -->
<g id="node5" class="node">
<title>猫</title>
<polygon fill="none" stroke="#586e75" points="228,-142.4333 174,-142.4333 174,-106.4333 228,-106.4333 228,-142.4333"></polygon>
<text text-anchor="middle" x="201" y="-119.6333" font-family="EBG,fzlz" font-size="16.00" fill="#268bd2">猫</text>
</g>
<!-- 是否有羽毛&#45;&gt;猫 -->
<g id="edge4" class="edge">
<title>是否有羽毛-&gt;猫</title>
<path fill="none" stroke="#586e75" d="M161.6808,-203.4194C169.5992,-187.5126 180.8257,-164.9603 189.2569,-148.0234"></path>
<polygon fill="#586e75" stroke="#586e75" points="192.0002,-142.5126 191.7434,-149.0871 190.6632,-145.1982 189.3263,-147.8839 189.3263,-147.8839 189.3263,-147.8839 190.6632,-145.1982 186.9092,-146.6806 192.0002,-142.5126 192.0002,-142.5126"></polygon>
<text text-anchor="middle" x="190" y="-165.4666" font-family="EBG,fzlz" font-size="16.00" fill="#dc322f">否</text>
</g>
<!-- 蛇 -->
<g id="node8" class="node">
<title>蛇</title>
<polygon fill="none" stroke="#586e75" points="304,-142.4333 250,-142.4333 250,-106.4333 304,-106.4333 304,-142.4333"></polygon>
<text text-anchor="middle" x="277" y="-119.6333" font-family="EBG,fzlz" font-size="16.00" fill="#268bd2">蛇</text>
</g>
<!-- 是否有腿&#45;&gt;蛇 -->
<g id="edge7" class="edge">
<title>是否有腿-&gt;蛇</title>
<path fill="none" stroke="#586e75" d="M298.6657,-203.4194C294.3404,-187.6509 288.2239,-165.352 283.5922,-148.4665"></path>
<polygon fill="#586e75" stroke="#586e75" points="281.9591,-142.5126 286.1501,-147.5846 282.7527,-145.4057 283.5463,-148.2988 283.5463,-148.2988 283.5463,-148.2988 282.7527,-145.4057 280.9425,-149.0131 281.9591,-142.5126 281.9591,-142.5126"></polygon>
<text text-anchor="middle" x="300" y="-165.4666" font-family="EBG,fzlz" font-size="16.00" fill="#dc322f">否</text>
</g>
<!-- 蜥蜴 -->
<g id="node9" class="node">
<title>蜥蜴</title>
<polygon fill="none" stroke="#586e75" points="381.5506,-142.4333 326.4494,-142.4333 326.4494,-106.4333 381.5506,-106.4333 381.5506,-142.4333"></polygon>
<text text-anchor="middle" x="354" y="-119.6333" font-family="EBG,fzlz" font-size="16.00" fill="#268bd2">蜥蜴</text>
</g>
<!-- 是否有腿&#45;&gt;蜥蜴 -->
<g id="edge8" class="edge">
<title>是否有腿-&gt;蜥蜴</title>
<path fill="none" stroke="#586e75" d="M313.6405,-203.8877C321.6971,-188.0269 333.2284,-165.3256 341.9037,-148.2468"></path>
<polygon fill="#586e75" stroke="#586e75" points="344.7272,-142.6884 344.4171,-149.2606 343.3685,-145.3631 342.0098,-148.0378 342.0098,-148.0378 342.0098,-148.0378 343.3685,-145.3631 339.6026,-146.815 344.7272,-142.6884 344.7272,-142.6884"></polygon>
<text text-anchor="middle" x="343.4472" y="-165.4666" font-family="EBG,fzlz" font-size="16.00" fill="#dc322f">是</text>
</g>
<!-- 鸡 -->
<g id="node6" class="node">
<title>鸡</title>
<polygon fill="none" stroke="#586e75" points="90,-52 36,-52 36,-16 90,-16 90,-52"></polygon>
<text text-anchor="middle" x="63" y="-29.2" font-family="EBG,fzlz" font-size="16.00" fill="#268bd2">鸡</text>
</g>
<!-- 是否会飞&#45;&gt;鸡 -->
<g id="edge5" class="edge">
<title>是否会飞-&gt;鸡</title>
<path fill="none" stroke="#586e75" d="M79.4433,-104.8106C76.2557,-91.0835 71.9783,-72.6638 68.5852,-58.0519"></path>
<polygon fill="#586e75" stroke="#586e75" points="67.1909,-52.0476 71.1782,-57.2813 67.8696,-54.9699 68.5482,-57.8921 68.5482,-57.8921 68.5482,-57.8921 67.8696,-54.9699 65.9182,-58.5029 67.1909,-52.0476 67.1909,-52.0476"></polygon>
<text text-anchor="middle" x="83" y="-73.8" font-family="EBG,fzlz" font-size="16.00" fill="#dc322f">否</text>
</g>
<!-- NULL -->
<g id="node7" class="node">
<title>NULL</title>
<polygon fill="none" stroke="#586e75" points="170.1506,-52 111.8494,-52 111.8494,-16 170.1506,-16 170.1506,-52"></polygon>
<text text-anchor="middle" x="141" y="-29.2" font-family="EBG,fzlz" font-size="16.00" fill="#268bd2">NULL</text>
</g>
<!-- 是否会飞&#45;&gt;NULL -->
<g id="edge6" class="edge">
<title>是否会飞-&gt;NULL</title>
<path fill="none" stroke="#586e75" d="M96.0882,-105.2547C104.878,-91.3094 116.827,-72.3516 126.1903,-57.4962"></path>
<polygon fill="#586e75" stroke="#586e75" points="129.5124,-52.2257 128.5971,-58.7413 127.9127,-54.7637 126.313,-57.3016 126.313,-57.3016 126.313,-57.3016 127.9127,-54.7637 124.0289,-55.8619 129.5124,-52.2257 129.5124,-52.2257"></polygon>
<text text-anchor="middle" x="126.4472" y="-73.8" font-family="EBG,fzlz" font-size="16.00" fill="#dc322f">是</text>
</g>
<!-- 没羽毛 -->
<g id="node10" class="node">
<title>没羽毛</title>
<ellipse fill="none" stroke="#586e75" cx="568" cy="-314.5332" rx="52.4641" ry="19.4695"></ellipse>
<text text-anchor="middle" x="568" y="-309.7332" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">没羽毛</text>
</g>
<!-- ？？？ -->
<g id="node12" class="node">
<title>？？？</title>
<polygon fill="none" stroke="#586e75" points="553,-240.8666 465,-240.8666 465,-204.8666 553,-204.8666 553,-240.8666"></polygon>
<text text-anchor="middle" x="509" y="-218.0666" font-family="EBG,fzlz" font-size="16.00" fill="#268bd2">？？？</text>
</g>
<!-- 没羽毛&#45;&gt;？？？ -->
<g id="edge9" class="edge">
<title>没羽毛-&gt;？？？</title>
<path fill="none" stroke="#586e75" d="M555.7752,-295.5398C546.5765,-281.2481 533.9177,-261.5804 524.0886,-246.3093"></path>
<polygon fill="#586e75" stroke="#586e75" points="520.607,-240.9001 526.1247,-244.484 522.2307,-243.4227 523.8544,-245.9454 523.8544,-245.9454 523.8544,-245.9454 522.2307,-243.4227 521.584,-247.4067 520.607,-240.9001 520.607,-240.9001"></polygon>
</g>
<!-- 不冷血 -->
<g id="node11" class="node">
<title>不冷血</title>
<ellipse fill="none" stroke="#586e75" cx="450" cy="-314.5332" rx="43.7179" ry="19.4695"></ellipse>
<text text-anchor="middle" x="450" y="-309.7332" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">不冷血</text>
</g>
<!-- 不冷血&#45;&gt;？？？ -->
<g id="edge10" class="edge">
<title>不冷血-&gt;？？？</title>
<path fill="none" stroke="#586e75" d="M461.9395,-295.9831C471.1967,-281.6006 484.081,-261.5825 494.0283,-246.1278"></path>
<polygon fill="#586e75" stroke="#586e75" points="497.2796,-241.0763 496.3026,-247.5829 495.6559,-243.5989 494.0322,-246.1216 494.0322,-246.1216 494.0322,-246.1216 495.6559,-243.5989 491.7618,-244.6603 497.2796,-241.0763 497.2796,-241.0763"></polygon>
</g>
</g>
</svg>
</p><div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section><section data-notes="" lineno="213" class="slide " data-line="213" data-h="3" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>学习期</h5></div></div>
<p>基本想法：让<span class="blue">机器</span>从数据中自动<span class="blue">学习</span>得到某种知识 (规律)</p>
<p>基本流程：</p>
<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->

<!-- Generated by graphviz version 2.40.1 (20161225.0304)
 -->
<!-- Title: g Pages: 1 -->
<svg width="582pt" height="101pt" viewBox="0.00 0.00 581.63 101.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 97)">
<title>g</title>
<g id="clust1" class="cluster">
<title>cluster_1</title>
<polygon fill="transparent" stroke="#586e75" stroke-dasharray="5,2" points="97.8944,-8 97.8944,-85 399.872,-85 399.872,-8 97.8944,-8"></polygon>
<text text-anchor="middle" x="248.8832" y="-68.4" font-family="EBG,fzlz" font-size="14.00" fill="#dc322f">特征工程</text>
</g>
<!--  原始数据  -->
<g id="node1" class="node">
<title> 原始数据 </title>
<polygon fill="none" stroke="#586e75" points="80.8417,-52 .0527,-52 .0527,-16 80.8417,-16 80.8417,-52"></polygon>
<text text-anchor="middle" x="40.4472" y="-29.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900"> 原始数据 </text>
</g>
<!--  &#160;特征提取 &#160; -->
<g id="node2" class="node">
<title> &nbsp;特征提取 &nbsp;</title>
<polygon fill="none" stroke="#586e75" points="189.0481,-52 105.8431,-52 105.8431,-16 189.0481,-16 189.0481,-52"></polygon>
<text text-anchor="middle" x="147.4456" y="-29.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900"> &nbsp;特征提取 &nbsp;</text>
</g>
<!--  原始数据 &#45;&gt; &#160;特征提取 &#160; -->
<g id="edge1" class="edge">
<title> 原始数据 -&gt; &nbsp;特征提取 &nbsp;</title>
<path fill="none" stroke="#586e75" d="M80.8987,-34C87.4066,-34 94.1889,-34 100.8274,-34"></path>
<polygon fill="#586e75" stroke="#586e75" points="105.869,-34 100.8691,-36.2501 103.369,-34 100.869,-34.0001 100.869,-34.0001 100.869,-34.0001 103.369,-34 100.869,-31.7501 105.869,-34 105.869,-34"></polygon>
</g>
<!--  &#160;特征处理 &#160; -->
<g id="node3" class="node">
<title> &nbsp;特征处理 &nbsp;</title>
<polygon fill="none" stroke="#586e75" points="295.6563,-52 214.1101,-52 214.1101,-16 295.6563,-16 295.6563,-52"></polygon>
<text text-anchor="middle" x="254.8832" y="-29.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900"> &nbsp;特征处理 &nbsp;</text>
</g>
<!--  &#160;特征提取 &#160;&#45;&gt; &#160;特征处理 &#160; -->
<g id="edge2" class="edge">
<title> &nbsp;特征提取 &nbsp;-&gt; &nbsp;特征处理 &nbsp;</title>
<path fill="none" stroke="#586e75" d="M189.2914,-34C195.6437,-34 202.2291,-34 208.6678,-34"></path>
<polygon fill="#586e75" stroke="#586e75" points="214.0334,-34 209.0335,-36.2501 211.5334,-34 209.0334,-34.0001 209.0334,-34.0001 209.0334,-34.0001 211.5334,-34 209.0334,-31.7501 214.0334,-34 214.0334,-34"></polygon>
</g>
<!-- 特征变换 -->
<g id="node4" class="node">
<title>特征变换</title>
<polygon fill="none" stroke="#586e75" points="391.9233,-52 320.7183,-52 320.7183,-16 391.9233,-16 391.9233,-52"></polygon>
<text text-anchor="middle" x="356.3208" y="-29.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">特征变换</text>
</g>
<!--  &#160;特征处理 &#160;&#45;&gt;特征变换 -->
<g id="edge3" class="edge">
<title> &nbsp;特征处理 &nbsp;-&gt;特征变换</title>
<path fill="none" stroke="#586e75" d="M295.8494,-34C302.293,-34 308.9549,-34 315.3975,-34"></path>
<polygon fill="#586e75" stroke="#586e75" points="320.7482,-34 315.7483,-36.2501 318.2482,-34 315.7482,-34.0001 315.7482,-34.0001 315.7482,-34.0001 318.2482,-34 315.7482,-31.7501 320.7482,-34 320.7482,-34"></polygon>
</g>
<!-- 模型学习 -->
<g id="node5" class="node">
<title>模型学习</title>
<polygon fill="none" stroke="#586e75" points="494.5052,-52 416.994,-52 416.994,-16 494.5052,-16 494.5052,-52"></polygon>
<text text-anchor="middle" x="455.7496" y="-29.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">模型学习</text>
</g>
<!-- 特征变换&#45;&gt;模型学习 -->
<g id="edge4" class="edge">
<title>特征变换-&gt;模型学习</title>
<path fill="none" stroke="#586e75" d="M391.936,-34C398.3302,-34 405.0636,-34 411.663,-34"></path>
<polygon fill="#586e75" stroke="#586e75" points="416.6757,-34 411.6757,-36.2501 414.1757,-34 411.6757,-34.0001 411.6757,-34.0001 411.6757,-34.0001 414.1757,-34 411.6756,-31.7501 416.6757,-34 416.6757,-34"></polygon>
</g>
<!-- 预测 -->
<g id="node6" class="node">
<title>预测</title>
<polygon fill="none" stroke="#586e75" points="573.6272,-52 519.6272,-52 519.6272,-16 573.6272,-16 573.6272,-52"></polygon>
<text text-anchor="middle" x="546.6272" y="-29.2" font-family="EBG,fzlz" font-size="16.00" fill="#b58900">预测</text>
</g>
<!-- 模型学习&#45;&gt;预测 -->
<g id="edge5" class="edge">
<title>模型学习-&gt;预测</title>
<path fill="none" stroke="#586e75" d="M494.5535,-34C501.1115,-34 507.8579,-34 514.2304,-34"></path>
<polygon fill="#586e75" stroke="#586e75" points="519.4831,-34 514.4831,-36.2501 516.9831,-34 514.4831,-34.0001 514.4831,-34.0001 514.4831,-34.0001 516.9831,-34 514.483,-31.7501 519.4831,-34 519.4831,-34"></polygon>
</g>
</g>
</svg>
</p><div class="bottom0"></div>
<p>原始数据：图片、视频、文本、语音、……</p>
<p>特征工程：</p>
<ul>
<li>提取：选取对目标任务有用的潜在特征，如对西瓜提取色泽、根蒂、敲声等</li>
<li>处理：无序的离散类别特征 → 数值特征，特征缺失处理，特征标准化</li>
<li>变换：对特征进行挑选或映射得到对目标任务更有效的特征</li>
</ul>
<p>模型学习：机器学习最核心的部分，学习一个特征到类别标记的映射</p>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="237" class="slide " data-line="237" data-h="3" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征提取 以文本为例</h5></div></div>
<p><span class="blue">词袋模型</span> (bag-of-words)：文本是单词的集合，单词间独立、无序</p>
<p>所有文本全部<span class="mathjax-exps">$d$</span>个不同的单词构成词典，每个文本提取<span class="mathjax-exps">$d$</span>个特征</p>
<p>若词典第<span class="mathjax-exps">$i$</span>个词在当前文本中出现过，则其第<span class="mathjax-exps">$i$</span>个特征为<span class="mathjax-exps">$1$</span>，否则为<span class="mathjax-exps">$0$</span></p>
<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>feature_extraction<span class="token punctuation">.</span>text <span class="token keyword">import</span> CountVectorizer
<span class="token keyword">import</span> pandas <span class="token keyword">as</span> pd

document1 <span class="token operator">=</span> <span class="token string">"I have a pen, I have an apple, apple pen."</span>
document2 <span class="token operator">=</span> <span class="token string">"I have a pen, I have pineapple, pineapple pen."</span>
cv <span class="token operator">=</span> CountVectorizer<span class="token punctuation">(</span>lowercase<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">,</span> token_pattern<span class="token operator">=</span><span class="token string">'\w+'</span><span class="token punctuation">,</span> binary<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span>
model <span class="token operator">=</span> cv<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span><span class="token punctuation">[</span>document1<span class="token punctuation">,</span> document2<span class="token punctuation">]</span><span class="token punctuation">)</span>
pd<span class="token punctuation">.</span>DataFrame<span class="token punctuation">(</span>model<span class="token punctuation">.</span>toarray<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> columns<span class="token operator">=</span>cv<span class="token punctuation">.</span>get_feature_names_out<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><div class="threelines column1-border-right-solid column1-bold head-highlight-1 tr-hover top-4">
<table>
<thead>
<tr>
<th style="text-align:center">词典</th>
<th style="text-align:center">I</th>
<th style="text-align:center">a</th>
<th style="text-align:center">an</th>
<th style="text-align:center">apple</th>
<th style="text-align:center">have</th>
<th style="text-align:center">pen</th>
<th style="text-align:center">pineapple</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">文本 1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">0</td>
</tr>
<tr>
<td style="text-align:center">文本 2</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">0</td>
<td style="text-align:center">0</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
</tr>
</tbody>
</table>
</div>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="269" class="slide " data-line="269" data-h="3" data-v="2">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征提取 以文本为例</h5></div></div>
<p><span class="blue">词袋模型</span> (bag-of-words)：文本是单词的集合，单词间独立、无序</p>
<p>所有文本全部<span class="mathjax-exps">$d$</span>个不同的单词构成词典，每个文本提取<span class="mathjax-exps">$d$</span>个特征</p>
<p>若词典第<span class="mathjax-exps">$i$</span>个词在当前文本中出现了<span class="mathjax-exps">$k$</span>次，则其第<span class="mathjax-exps">$i$</span>个特征为<span class="mathjax-exps">$k$</span></p>
<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>feature_extraction<span class="token punctuation">.</span>text <span class="token keyword">import</span> CountVectorizer
<span class="token keyword">import</span> pandas <span class="token keyword">as</span> pd

document1 <span class="token operator">=</span> <span class="token string">"I have a pen, I have an apple, apple pen."</span>
document2 <span class="token operator">=</span> <span class="token string">"I have a pen, I have pineapple, pineapple pen."</span>
cv <span class="token operator">=</span> CountVectorizer<span class="token punctuation">(</span>lowercase<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">,</span> token_pattern<span class="token operator">=</span><span class="token string">'\w+'</span><span class="token punctuation">)</span>
model <span class="token operator">=</span> cv<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span><span class="token punctuation">[</span>document1<span class="token punctuation">,</span> document2<span class="token punctuation">]</span><span class="token punctuation">)</span>
pd<span class="token punctuation">.</span>DataFrame<span class="token punctuation">(</span>model<span class="token punctuation">.</span>toarray<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> columns<span class="token operator">=</span>cv<span class="token punctuation">.</span>get_feature_names_out<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><div class="threelines column1-border-right-solid column1-bold head-highlight-1 tr-hover top-4">
<table>
<thead>
<tr>
<th style="text-align:center">词典</th>
<th style="text-align:center">I</th>
<th style="text-align:center">a</th>
<th style="text-align:center">an</th>
<th style="text-align:center">apple</th>
<th style="text-align:center">have</th>
<th style="text-align:center">pen</th>
<th style="text-align:center">pineapple</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">文本 1</td>
<td style="text-align:center">2</td>
<td style="text-align:center">1</td>
<td style="text-align:center">1</td>
<td style="text-align:center">2</td>
<td style="text-align:center">2</td>
<td style="text-align:center">2</td>
<td style="text-align:center">0</td>
</tr>
<tr>
<td style="text-align:center">文本 2</td>
<td style="text-align:center">2</td>
<td style="text-align:center">1</td>
<td style="text-align:center">0</td>
<td style="text-align:center">0</td>
<td style="text-align:center">2</td>
<td style="text-align:center">2</td>
<td style="text-align:center">2</td>
</tr>
</tbody>
</table>
</div>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="301" class="slide " data-line="301" data-h="3" data-v="3">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征提取 以文本为例</h5></div></div>
<p><span class="blue">词袋模型</span> (bag-of-words)：文本是单词的集合，单词间独立、无序</p>
<p>所有文本全部<span class="mathjax-exps">$d$</span>个不同的单词构成词典，每个文本提取<span class="mathjax-exps">$d$</span>个特征</p>
<p><span class="blue">词频 - 逆文本频率</span>特征：对当前文本重要的单词必然</p>
<ul>
<li>在当前文本中出现的频率高，即词频 (term frequency, tf) 高</li>
<li>在其他文本中出现的频率低，即逆文本频率 (inverse document frequency, idf) 高</li>
</ul>
<p>tf = 单词在当前文本中出现的次数 / 当前文本的总词数</p>
<p>idf = ln ((全部文本数 + C) / (包含该词的总文本数 + C)) + 1</p>
<ul>
<li>C = 0，若词典包含从未在任何文本中出现的词，会有分母为零的问题</li>
<li>C = 1，sklearn 中默认采用的平滑版本，相当于额外有一个包含所有词的文本</li>
</ul>
<p>tf - idf 特征 = normalize (tf × idf)，即将 tf 和 idf 相乘后再标准化</p>
<ul>
<li><span class="mathjax-exps">$\ell_1$</span>标准化，tf × idf / sum (tf × idf)，即线性变换成概率分布</li>
<li><span class="mathjax-exps">$\ell_2$</span>标准化，tf × idf / sqrt(sum ([tf × idf]^2))，即线性变换成模为 1 的向量</li>
</ul>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="328" class="slide " data-line="328" data-h="3" data-v="4">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征提取 以文本为例</h5></div></div>
<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>feature_extraction<span class="token punctuation">.</span>text <span class="token keyword">import</span> TfidfVectorizer
<span class="token keyword">import</span> pandas <span class="token keyword">as</span> pd

document1 <span class="token operator">=</span> <span class="token string">"I have a pen, I have an apple, apple pen."</span>
document2 <span class="token operator">=</span> <span class="token string">"I have a pen, I have pineapple, pineapple pen."</span>
tv <span class="token operator">=</span> TfidfVectorizer<span class="token punctuation">(</span>lowercase<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">,</span> token_pattern<span class="token operator">=</span><span class="token string">'\w+'</span><span class="token punctuation">,</span>
                     norm<span class="token operator">=</span><span class="token string">'l1'</span><span class="token punctuation">,</span> smooth_idf<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">)</span> <span class="token comment"># l1归一化 idf不平滑</span>
model <span class="token operator">=</span> tv<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span><span class="token punctuation">[</span>document1<span class="token punctuation">,</span> document2<span class="token punctuation">]</span><span class="token punctuation">)</span>
pd<span class="token punctuation">.</span>DataFrame<span class="token punctuation">(</span>model<span class="token punctuation">.</span>toarray<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> columns<span class="token operator">=</span>cv<span class="token punctuation">.</span>get_feature_names_out<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><div class="threelines row3-border-top-dashed row3-border-bottom-dashed column1-border1-right-dashed-head row1-column1-border1-right-dashed row3-column1-border1-right-dashed row4-column1-border1-right-dashed head-highlight-1 tr-hover top-4">
<table>
<thead>
<tr>
<th style="text-align:center">词典</th>
<th style="text-align:center">I</th>
<th style="text-align:center">a</th>
<th style="text-align:center">an</th>
<th style="text-align:center">apple</th>
<th style="text-align:center">have</th>
<th style="text-align:center">pen</th>
<th style="text-align:center">pineapple</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center" rowspan="2">tf</td>
<td style="text-align:center">2 / 10</td>
<td style="text-align:center">1 / 10</td>
<td style="text-align:center">1 / 10</td>
<td style="text-align:center">2 / 10</td>
<td style="text-align:center">2 / 10</td>
<td style="text-align:center">2 / 10</td>
<td style="text-align:center">0</td>
</tr>
<tr>

<td style="text-align:center">2 / 9</td>
<td style="text-align:center">1 / 9</td>
<td style="text-align:center">0</td>
<td style="text-align:center">0</td>
<td style="text-align:center">2 / 9</td>
<td style="text-align:center">2 / 9</td>
<td style="text-align:center">2 / 9</td>
</tr>
<tr>
<td style="text-align:center">idf</td>
<td style="text-align:center">ln (1) + 1</td>
<td style="text-align:center">ln (1) + 1</td>
<td style="text-align:center">ln (2) + 1</td>
<td style="text-align:center">ln (2) + 1</td>
<td style="text-align:center">ln (1) + 1</td>
<td style="text-align:center">ln (1) + 1</td>
<td style="text-align:center">ln (2) + 1</td>
</tr>
<tr>
<td style="text-align:center" rowspan="2">tf - idf</td>
<td style="text-align:center">0.165571</td>
<td style="text-align:center">0.082785</td>
<td style="text-align:center">0.140168</td>
<td style="text-align:center">0.280335</td>
<td style="text-align:center">0.165571</td>
<td style="text-align:center">0.165571</td>
<td style="text-align:center">0.000000</td>
</tr>
<tr>

<td style="text-align:center">0.192561</td>
<td style="text-align:center">0.096281</td>
<td style="text-align:center">0.000000</td>
<td style="text-align:center">0.000000</td>
<td style="text-align:center">0.192561</td>
<td style="text-align:center">0.192561</td>
<td style="text-align:center">0.326035</td>
</tr>
</tbody>
</table>
</div>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section><section data-notes="" lineno="358" class="slide " data-line="358" data-h="4" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征 离散类别 → 数值</h5></div></div>
<div class="threelines column9-border-right-solid head-highlight-1 tr-hover">
<table>
<thead>
<tr>
<th style="text-align:center">编号</th>
<th style="text-align:center">色泽</th>
<th style="text-align:center">根蒂</th>
<th style="text-align:center">敲声</th>
<th style="text-align:center">纹理</th>
<th style="text-align:center">脐部</th>
<th style="text-align:center">触感</th>
<th style="text-align:center">密度</th>
<th style="text-align:center">含糖率</th>
<th style="text-align:center">好瓜</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:center">青绿</td>
<td style="text-align:center">蜷缩</td>
<td style="text-align:center">浊响</td>
<td style="text-align:center">清晰</td>
<td style="text-align:center">凹陷</td>
<td style="text-align:center">硬滑</td>
<td style="text-align:center">0.697</td>
<td style="text-align:center">0.460</td>
<td style="text-align:center">是</td>
</tr>
<tr>
<td style="text-align:center">2</td>
<td style="text-align:center">乌黑</td>
<td style="text-align:center">蜷缩</td>
<td style="text-align:center">沉闷</td>
<td style="text-align:center">清晰</td>
<td style="text-align:center">凹陷</td>
<td style="text-align:center">硬滑</td>
<td style="text-align:center">0.774</td>
<td style="text-align:center">0.376</td>
<td style="text-align:center">是</td>
</tr>
<tr>
<td style="text-align:center">3</td>
<td style="text-align:center">乌黑</td>
<td style="text-align:center">稍蜷</td>
<td style="text-align:center">沉闷</td>
<td style="text-align:center">稍糊</td>
<td style="text-align:center">稍凹</td>
<td style="text-align:center">硬滑</td>
<td style="text-align:center">0.666</td>
<td style="text-align:center">0.091</td>
<td style="text-align:center">否</td>
</tr>
<tr>
<td style="text-align:center">4</td>
<td style="text-align:center">浅白</td>
<td style="text-align:center">硬挺</td>
<td style="text-align:center">清脆</td>
<td style="text-align:center">模糊</td>
<td style="text-align:center">平坦</td>
<td style="text-align:center">硬滑</td>
<td style="text-align:center">0.245</td>
<td style="text-align:center">0.057</td>
<td style="text-align:center">否</td>
</tr>
</tbody>
</table>
</div>
<p>三种重编码方式：</p>
<ul>
<li>序数编码 (ordinal encoding)：清晰 - 0、稍糊 - 1、模糊 - 2，<span class="blue">需类别特征本身有序</span>，否则若青绿 - 0、乌黑 - 1、浅白 - 2，为何 | 青绿 - 浅白 | &gt; | 乌黑 - 浅白 | ？</li>
<li>独热编码 (one-hot encoding)：青绿 - 001、乌黑 - 010、浅白 - 100，一碗水端平，所有取值距离相等，但若取值很多码会很长，且不适应动态出现的新取值</li>
<li>哈希编码 (hash encoding)：用哈希函数将任意输入映射到有限整数范围，码长固定，也能适应动态出现的新取值，但可能存在信息丢失</li>
</ul>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="381" class="slide " data-line="381" data-h="4" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征独热编码</h5></div></div>
<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">import</span> numpy <span class="token keyword">as</span> np
<span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>preprocessing <span class="token keyword">import</span> LabelBinarizer<span class="token punctuation">,</span> OneHotEncoder

X <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span>
    <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'青绿'</span><span class="token punctuation">,</span> <span class="token string">'蜷缩'</span><span class="token punctuation">,</span> <span class="token string">'浊响'</span><span class="token punctuation">,</span> <span class="token string">'清晰'</span><span class="token punctuation">,</span> <span class="token string">'凹陷'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.697</span><span class="token punctuation">,</span> <span class="token number">0.460</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'乌黑'</span><span class="token punctuation">,</span> <span class="token string">'蜷缩'</span><span class="token punctuation">,</span> <span class="token string">'沉闷'</span><span class="token punctuation">,</span> <span class="token string">'清晰'</span><span class="token punctuation">,</span> <span class="token string">'凹陷'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.774</span><span class="token punctuation">,</span> <span class="token number">0.376</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'乌黑'</span><span class="token punctuation">,</span> <span class="token string">'稍蜷'</span><span class="token punctuation">,</span> <span class="token string">'沉闷'</span><span class="token punctuation">,</span> <span class="token string">'稍糊'</span><span class="token punctuation">,</span> <span class="token string">'稍凹'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.666</span><span class="token punctuation">,</span> <span class="token number">0.091</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'浅白'</span><span class="token punctuation">,</span> <span class="token string">'硬挺'</span><span class="token punctuation">,</span> <span class="token string">'清脆'</span><span class="token punctuation">,</span> <span class="token string">'模糊'</span><span class="token punctuation">,</span> <span class="token string">'平坦'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.245</span><span class="token punctuation">,</span> <span class="token number">0.057</span><span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
y <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'是'</span><span class="token punctuation">,</span> <span class="token string">'是'</span><span class="token punctuation">,</span> <span class="token string">'否'</span><span class="token punctuation">,</span> <span class="token string">'否'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># 类别标记只有两种取值</span>
LabelBinarizer<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>y<span class="token punctuation">)</span><span class="token punctuation">.</span>squeeze<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">[</span><span class="token number">1</span> <span class="token number">1</span> <span class="token number">0</span> <span class="token number">0</span><span class="token punctuation">]</span>

enc <span class="token operator">=</span> OneHotEncoder<span class="token punctuation">(</span><span class="token punctuation">)</span>
enc<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">:</span><span class="token number">7</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">.</span>toarray<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># 对6个类别特征采用独热编码</span>
<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span><span class="token punctuation">]</span>
 <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span><span class="token punctuation">]</span>
 <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span><span class="token punctuation">]</span>
 <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span> <span class="token number">0</span><span class="token punctuation">.</span> <span class="token number">1</span><span class="token punctuation">.</span><span class="token punctuation">]</span><span class="token punctuation">]</span>

enc<span class="token punctuation">.</span>get_feature_names_out<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># 独热编码对应的原始特征</span>
<span class="token punctuation">[</span><span class="token string">'x0_乌黑'</span> <span class="token string">'x0_浅白'</span> <span class="token string">'x0_青绿'</span> <span class="token string">'x1_硬挺'</span> <span class="token string">'x1_稍蜷'</span> <span class="token string">'x1_蜷缩'</span> <span class="token string">'x2_沉闷'</span> <span class="token string">'x2_浊响'</span>
 <span class="token string">'x2_清脆'</span> <span class="token string">'x3_模糊'</span> <span class="token string">'x3_清晰'</span> <span class="token string">'x3_稍糊'</span> <span class="token string">'x4_凹陷'</span> <span class="token string">'x4_平坦'</span> <span class="token string">'x4_稍凹'</span> <span class="token string">'x5_硬滑'</span><span class="token punctuation">]</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section><section data-notes="" lineno="412" class="slide " data-line="412" data-h="5" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征缺失处理</h5></div></div>
<div class="threelines column9-border-right-solid head-highlight-1 tr-hover">
<table>
<thead>
<tr>
<th style="text-align:center">编号</th>
<th style="text-align:center">色泽</th>
<th style="text-align:center">根蒂</th>
<th style="text-align:center">敲声</th>
<th style="text-align:center">纹理</th>
<th style="text-align:center">脐部</th>
<th style="text-align:center">触感</th>
<th style="text-align:center">密度</th>
<th style="text-align:center">含糖率</th>
<th style="text-align:center">好瓜</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:center">青绿</td>
<td style="text-align:center">蜷缩</td>
<td style="text-align:center">浊响</td>
<td style="text-align:center">清晰</td>
<td style="text-align:center">凹陷</td>
<td style="text-align:center">硬滑</td>
<td style="text-align:center">0.697</td>
<td style="text-align:center">-</td>
<td style="text-align:center">是</td>
</tr>
<tr>
<td style="text-align:center">2</td>
<td style="text-align:center">乌黑</td>
<td style="text-align:center">蜷缩</td>
<td style="text-align:center">沉闷</td>
<td style="text-align:center">清晰</td>
<td style="text-align:center">凹陷</td>
<td style="text-align:center">硬滑</td>
<td style="text-align:center">0.774</td>
<td style="text-align:center">0.376</td>
<td style="text-align:center">是</td>
</tr>
<tr>
<td style="text-align:center">3</td>
<td style="text-align:center">乌黑</td>
<td style="text-align:center">稍蜷</td>
<td style="text-align:center">沉闷</td>
<td style="text-align:center">-</td>
<td style="text-align:center">稍凹</td>
<td style="text-align:center">硬滑</td>
<td style="text-align:center">0.666</td>
<td style="text-align:center">0.091</td>
<td style="text-align:center">否</td>
</tr>
<tr>
<td style="text-align:center">4</td>
<td style="text-align:center">浅白</td>
<td style="text-align:center">硬挺</td>
<td style="text-align:center">清脆</td>
<td style="text-align:center">模糊</td>
<td style="text-align:center">平坦</td>
<td style="text-align:center">硬滑</td>
<td style="text-align:center">0.245</td>
<td style="text-align:center">0.057</td>
<td style="text-align:center">否</td>
</tr>
</tbody>
</table>
</div>
<p>删除：直接删除有特征缺失的样本，简单粗暴，信息损失</p>
<p>补全：</p>
<ul>
<li>用其他未缺失该特征的样本计算平均数、中位数、众数填充，人为引入噪声</li>
<li>用不存在缺失的其它特征<span class="blue">学习并预测</span>缺失特征的取值，若两者之间无关？</li>
<li>将“缺失”本身作为一种特征取值</li>
</ul>
<p>忽略：采用对缺失特征不敏感的学习模型，如决策树</p>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="439" class="slide " data-line="439" data-h="5" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征缺失处理</h5></div></div>
<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">import</span> numpy <span class="token keyword">as</span> np
<span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>impute <span class="token keyword">import</span> SimpleImputer

X <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span>
    <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'青绿'</span><span class="token punctuation">,</span> <span class="token string">'蜷缩'</span><span class="token punctuation">,</span> <span class="token string">'浊响'</span><span class="token punctuation">,</span> <span class="token string">'清晰'</span><span class="token punctuation">,</span> <span class="token string">'凹陷'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.697</span><span class="token punctuation">,</span> np<span class="token punctuation">.</span>nan<span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'乌黑'</span><span class="token punctuation">,</span> <span class="token string">'蜷缩'</span><span class="token punctuation">,</span> <span class="token string">'沉闷'</span><span class="token punctuation">,</span> <span class="token string">'清晰'</span><span class="token punctuation">,</span> <span class="token string">'凹陷'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.774</span><span class="token punctuation">,</span> <span class="token number">0.376</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'乌黑'</span><span class="token punctuation">,</span> <span class="token string">'稍蜷'</span><span class="token punctuation">,</span> <span class="token string">'沉闷'</span><span class="token punctuation">,</span> <span class="token string">'-'</span><span class="token punctuation">,</span> <span class="token string">'稍凹'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.666</span><span class="token punctuation">,</span> <span class="token number">0.091</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'浅白'</span><span class="token punctuation">,</span> <span class="token string">'硬挺'</span><span class="token punctuation">,</span> <span class="token string">'清脆'</span><span class="token punctuation">,</span> <span class="token string">'模糊'</span><span class="token punctuation">,</span> <span class="token string">'平坦'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.245</span><span class="token punctuation">,</span> <span class="token number">0.057</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">)</span>

imp_mean <span class="token operator">=</span> SimpleImputer<span class="token punctuation">(</span>strategy<span class="token operator">=</span><span class="token string">'mean'</span><span class="token punctuation">)</span>
imp_mean<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">:</span><span class="token number">9</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># 用均值填充</span>
<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">0.697</span>    <span class="token number">0.17466667</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">0.774</span>    <span class="token number">0.376</span>     <span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">0.666</span>    <span class="token number">0.091</span>     <span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">0.245</span>    <span class="token number">0.057</span>     <span class="token punctuation">]</span><span class="token punctuation">]</span>

imp_median <span class="token operator">=</span> SimpleImputer<span class="token punctuation">(</span>strategy<span class="token operator">=</span><span class="token string">'median'</span><span class="token punctuation">)</span>
imp_median<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">:</span><span class="token number">9</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># 用中位数填充</span>
<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">0.697</span>    <span class="token number">0.091</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">0.774</span>    <span class="token number">0.376</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">0.666</span>    <span class="token number">0.091</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">0.245</span>    <span class="token number">0.057</span><span class="token punctuation">]</span><span class="token punctuation">]</span>

imp_frequent <span class="token operator">=</span> SimpleImputer<span class="token punctuation">(</span>missing_values<span class="token operator">=</span><span class="token string">'-'</span><span class="token punctuation">,</span> strategy<span class="token operator">=</span><span class="token string">'most_frequent'</span><span class="token punctuation">)</span>
imp_frequent<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">:</span><span class="token number">7</span><span class="token punctuation">]</span><span class="token punctuation">.</span>astype<span class="token punctuation">(</span><span class="token string">'object'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 用众数填充</span>
<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">'青绿'</span><span class="token punctuation">,</span> <span class="token string">'蜷缩'</span><span class="token punctuation">,</span> <span class="token string">'浊响'</span><span class="token punctuation">,</span> <span class="token string">'清晰'</span><span class="token punctuation">,</span> <span class="token string">'凹陷'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token string">'乌黑'</span><span class="token punctuation">,</span> <span class="token string">'蜷缩'</span><span class="token punctuation">,</span> <span class="token string">'沉闷'</span><span class="token punctuation">,</span> <span class="token string">'清晰'</span><span class="token punctuation">,</span> <span class="token string">'凹陷'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token string">'乌黑'</span><span class="token punctuation">,</span> <span class="token string">'稍蜷'</span><span class="token punctuation">,</span> <span class="token string">'沉闷'</span><span class="token punctuation">,</span> <span class="token string">'清晰'</span><span class="token punctuation">,</span> <span class="token string">'稍凹'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token string">'浅白'</span><span class="token punctuation">,</span> <span class="token string">'硬挺'</span><span class="token punctuation">,</span> <span class="token string">'清脆'</span><span class="token punctuation">,</span> <span class="token string">'模糊'</span><span class="token punctuation">,</span> <span class="token string">'平坦'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">]</span><span class="token punctuation">]</span>

<span class="token comment"># 回归器默认采用BayesianRidge</span>
<span class="token comment"># 可选DecisionTreeRegressor ExtraTreesRegressor KNeighborsRegressor</span>
imp_iter <span class="token operator">=</span> IterativeImputer<span class="token punctuation">(</span><span class="token punctuation">)</span>
imp_iter<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">:</span><span class="token number">9</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">0.697</span>    <span class="token number">0.20908713</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">0.774</span>    <span class="token number">0.376</span>     <span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">0.666</span>    <span class="token number">0.091</span>     <span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">0.245</span>    <span class="token number">0.057</span>     <span class="token punctuation">]</span><span class="token punctuation">]</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section><section data-notes="" lineno="487" class="slide " data-line="487" data-h="6" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征标准化</h5></div></div>
<p>也称归一化，旨在<span class="blue">消除不同特征间的量纲影响</span></p>
<br>
<p>离差标准化：将原始特征线性变换到 [0, 1] 区间</p>
<p>

$$
\begin{align*}
    x \leftarrow \frac{x - x_\min}{x_\max - x_\min} \in [0,1]
\end{align*}
$$
</p>

<p>最大值标准化：除以该特征的绝对值最大值</p>
<p>

$$
\begin{align*}
    x \leftarrow \frac{x}{\max_{i \in [m]} |x_i|} \in [-1,1]
\end{align*}
$$
</p>

<p>标准差标准化：经过处理的特征近似符合标准正态分布<span class="mathjax-exps">$\Ncal(0,1)$</span></p>
<p>

$$
\begin{align*}
    x \leftarrow \frac{x - \mu}{\sigma}, \quad x \leftarrow \frac{x - x_{\text{median}}}{\sum_{i \in [m]} |x_i - x_{\text{median}}| / m}
\end{align*}
$$
</p>

<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="533" class="slide " data-line="533" data-h="6" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>离差与最大值标准化</h5></div></div>
<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">import</span> numpy <span class="token keyword">as</span> np
<span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>preprocessing <span class="token keyword">import</span> MinMaxScaler<span class="token punctuation">,</span> MaxAbsScaler

X <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span>
    <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'青绿'</span><span class="token punctuation">,</span> <span class="token string">'蜷缩'</span><span class="token punctuation">,</span> <span class="token string">'浊响'</span><span class="token punctuation">,</span> <span class="token string">'清晰'</span><span class="token punctuation">,</span> <span class="token string">'凹陷'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.697</span><span class="token punctuation">,</span> <span class="token number">0.460</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'乌黑'</span><span class="token punctuation">,</span> <span class="token string">'蜷缩'</span><span class="token punctuation">,</span> <span class="token string">'沉闷'</span><span class="token punctuation">,</span> <span class="token string">'清晰'</span><span class="token punctuation">,</span> <span class="token string">'凹陷'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.774</span><span class="token punctuation">,</span> <span class="token number">0.376</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'乌黑'</span><span class="token punctuation">,</span> <span class="token string">'稍蜷'</span><span class="token punctuation">,</span> <span class="token string">'沉闷'</span><span class="token punctuation">,</span> <span class="token string">'稍糊'</span><span class="token punctuation">,</span> <span class="token string">'稍凹'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.666</span><span class="token punctuation">,</span> <span class="token number">0.091</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'浅白'</span><span class="token punctuation">,</span> <span class="token string">'硬挺'</span><span class="token punctuation">,</span> <span class="token string">'清脆'</span><span class="token punctuation">,</span> <span class="token string">'模糊'</span><span class="token punctuation">,</span> <span class="token string">'平坦'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.245</span><span class="token punctuation">,</span> <span class="token number">0.057</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">)</span>

MinMaxScaler<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">:</span><span class="token number">9</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># 最大值变成1 同时 最小值变成0</span>
<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">0.85444234</span>    <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">.</span>            <span class="token number">0.79156328</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">0.79584121</span>    <span class="token number">0.08436725</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">.</span>            <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">]</span><span class="token punctuation">]</span>

MaxAbsScaler<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">:</span><span class="token number">9</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># 最大值变成1</span>
<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">0.9005168</span>     <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">.</span>            <span class="token number">0.8173913</span> <span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">0.86046512</span>    <span class="token number">0.19782609</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">0.31653747</span>    <span class="token number">0.12391304</span><span class="token punctuation">]</span><span class="token punctuation">]</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="563" class="slide " data-line="563" data-h="6" data-v="2">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>标准差标准化</h5></div></div>
<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">import</span> numpy <span class="token keyword">as</span> np
<span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>preprocessing <span class="token keyword">import</span> scale

X <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span>
    <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'青绿'</span><span class="token punctuation">,</span> <span class="token string">'蜷缩'</span><span class="token punctuation">,</span> <span class="token string">'浊响'</span><span class="token punctuation">,</span> <span class="token string">'清晰'</span><span class="token punctuation">,</span> <span class="token string">'凹陷'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.697</span><span class="token punctuation">,</span> <span class="token number">0.460</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'乌黑'</span><span class="token punctuation">,</span> <span class="token string">'蜷缩'</span><span class="token punctuation">,</span> <span class="token string">'沉闷'</span><span class="token punctuation">,</span> <span class="token string">'清晰'</span><span class="token punctuation">,</span> <span class="token string">'凹陷'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.774</span><span class="token punctuation">,</span> <span class="token number">0.376</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'乌黑'</span><span class="token punctuation">,</span> <span class="token string">'稍蜷'</span><span class="token punctuation">,</span> <span class="token string">'沉闷'</span><span class="token punctuation">,</span> <span class="token string">'稍糊'</span><span class="token punctuation">,</span> <span class="token string">'稍凹'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.666</span><span class="token punctuation">,</span> <span class="token number">0.091</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'浅白'</span><span class="token punctuation">,</span> <span class="token string">'硬挺'</span><span class="token punctuation">,</span> <span class="token string">'清脆'</span><span class="token punctuation">,</span> <span class="token string">'模糊'</span><span class="token punctuation">,</span> <span class="token string">'平坦'</span><span class="token punctuation">,</span> <span class="token string">'硬滑'</span><span class="token punctuation">,</span> <span class="token number">0.245</span><span class="token punctuation">,</span> <span class="token number">0.057</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">)</span>

x <span class="token operator">=</span> scale<span class="token punctuation">(</span>X<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">:</span><span class="token number">9</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
x
<span class="token punctuation">[</span><span class="token punctuation">[</span> <span class="token number">0.49236904</span>     <span class="token number">1.22314674</span><span class="token punctuation">]</span>
 <span class="token punctuation">[</span> <span class="token number">0.86589038</span>     <span class="token number">0.74303307</span><span class="token punctuation">]</span>
 <span class="token punctuation">[</span> <span class="token number">0.34199032</span>    <span class="token operator">-</span><span class="token number">0.88592404</span><span class="token punctuation">]</span>
 <span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1.70024974</span>    <span class="token operator">-</span><span class="token number">1.08025576</span><span class="token punctuation">]</span><span class="token punctuation">]</span>

x<span class="token punctuation">.</span>mean<span class="token punctuation">(</span>axis<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token comment"># 均值接近0</span>
<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1.11022302e-16</span>    <span class="token operator">-</span><span class="token number">1.66533454e-16</span><span class="token punctuation">]</span>

x<span class="token punctuation">.</span>std<span class="token punctuation">(</span>axis<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token comment"># 标准差为1</span>
<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">.</span>    <span class="token number">1</span><span class="token punctuation">.</span><span class="token punctuation">]</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section><section data-notes="" lineno="594" class="slide " data-line="594" data-h="7" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换</h5></div></div>
<p>该步是模型学习前的最后一步，亦有将该步与模型学习融合的做法</p>
<br>
<p>当部分特征冗余甚至有害时，挑选或生成有用的特征子集</p>
<ul>
<li>去除低方差特征，特别是那些在所有样本上取值均不变的特征</li>
<li>先计算 F 检验值、卡方检验值、互信息、线性相关性等统计量，然后据此设立阈值选择特征</li>
<li>引入<span class="mathjax-exps">$\ell_1$</span>等稀疏范数作为约束，将选择特征与模型学习合二为一</li>
<li>通过 PCA、随机投影等降维技术浓缩现有特征</li>
</ul>
<br>
<p>当特征稀缺时，利用现有特征构造新的特征</p>
<ul>
<li>凭经验显式构造：<span class="mathjax-exps">$\xv = [x_1; x_2] \xrightarrow{\Rbb^2 \mapsto \Rbb^6} \xvt = [x_1^2; x_2^2; \sqrt{2} x_1 x_2; \sqrt{2} x_1; \sqrt{2} x_2; 1]$</span></li>
<li>利用核函数<span class="mathjax-exps">$\kappa(\xv, \zv) = \phi(\xv)^\top \phi(\zv)$</span>隐式构造，其中<span class="mathjax-exps">$\phi: \Rbb^d \mapsto \Hbb$</span>是核映射，代表性方法为核方法</li>
<li>利用非线性函数复合<span class="mathjax-exps">$f_n ( f_{n-1} ( \cdots f_2 (f_1 (\xv))))$</span>，代表性方法为神经网络</li>
</ul>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="619" class="slide " data-line="619" data-h="7" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换</h5></div></div>
<p>该步是模型学习前的最后一步，亦有将该步与模型学习融合的做法</p>
<br>
<p>当部分特征冗余甚至有害时，挑选或生成有用的特征子集</p>
<ul>
<li>去除低方差特征，特别是那些在所有样本上取值均不变的特征</li>
<li>先计算 F 检验值、卡方检验值、互信息、线性相关性等统计量，然后据此设立阈值选择特征</li>
<li>引入<span class="mathjax-exps">$\ell_1$</span>等稀疏范数作为约束，将选择特征与模型学习合二为一</li>
<li>通过 PCA、随机投影等降维技术浓缩现有特征</li>
</ul>
<br>
<div class="invis" markdown="1">
<p>当特征稀缺时，利用现有特征构造新的特征</p>
<ul>
<li>凭经验显式构造：<span class="mathjax-exps">$\xv = [x_1; x_2] \xrightarrow{\Rbb^2 \mapsto \Rbb^6} \xvt = [x_1^2; x_2^2; \sqrt{2} x_1 x_2; \sqrt{2} x_1; \sqrt{2} x_2; 1]$</span></li>
<li>利用核函数<span class="mathjax-exps">$\kappa(\xv, \zv) = \phi(\xv)^\top \phi(\zv)$</span>隐式构造，其中<span class="mathjax-exps">$\phi: \Rbb^d \mapsto \Hbb$</span>是核映射，代表性方法为核方法</li>
<li>利用非线性函数复合<span class="mathjax-exps">$f_n ( f_{n-1} ( \cdots f_2 (f_1 (\xv))))$</span>，代表性方法为神经网络</li>
</ul>
</div>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="648" class="slide " data-line="648" data-h="7" data-v="2">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 低方差过滤</h5></div></div>
<p><span class="blue">过滤低方差特征</span>，尤其是那些在所有样本上取值均相同的特征</p>
<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">import</span> numpy <span class="token keyword">as</span> np
<span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>feature_selection <span class="token keyword">import</span> VarianceThreshold

X <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span> <span class="token comment"># 对西瓜数据集的6个离散类别特征采用了独热编码</span>
    <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.697</span><span class="token punctuation">,</span> <span class="token number">0.460</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.774</span><span class="token punctuation">,</span> <span class="token number">0.376</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.666</span><span class="token punctuation">,</span> <span class="token number">0.091</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.245</span><span class="token punctuation">,</span> <span class="token number">0.057</span><span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
X<span class="token punctuation">.</span>shape
<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">19</span><span class="token punctuation">)</span>

<span class="token comment"># 倒数第三列由特征“触感”而来 四个样本都取值“硬滑” 独热编码后都是1 方差为0</span>
XX <span class="token operator">=</span> VarianceThreshold<span class="token punctuation">(</span>threshold<span class="token operator">=</span><span class="token number">0.01</span><span class="token punctuation">)</span><span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">)</span>
<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0.697</span><span class="token punctuation">,</span> <span class="token number">0.46</span> <span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0.774</span><span class="token punctuation">,</span> <span class="token number">0.376</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.666</span><span class="token punctuation">,</span> <span class="token number">0.091</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0.245</span><span class="token punctuation">,</span> <span class="token number">0.057</span><span class="token punctuation">]</span><span class="token punctuation">]</span>

XX<span class="token punctuation">.</span>shape
<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">18</span><span class="token punctuation">)</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section><section data-notes="" lineno="679" class="slide " data-line="679" data-h="8" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 方差分析</h5></div></div>
<p>设共有<span class="mathjax-exps">$k$</span>个类别，总样本数为<span class="mathjax-exps">$m = \sum_{i \in [k]} m_i$</span>，总体均值为<span class="mathjax-exps">$\xbar$</span></p>
<p>设第<span class="mathjax-exps">$i$</span>类第<span class="mathjax-exps">$j$</span>个样本为<span class="mathjax-exps">$x_{ij}$</span>，第<span class="mathjax-exps">$i$</span>类的均值为<span class="mathjax-exps">$\xbar_i$</span>，则总体偏差</p>
<p>

$$
\begin{align*}
    \sum_{i \in [k]} &amp; \sum_{j \in [m_i]} (x_{ij} - \xbar)^2 = \sum_{i \in [k]} \sum_{j \in [m_i]} (x_{ij} - \xbar_i + \xbar_i - \xbar)^2 \\
    &amp; = \sum_{i \in [k]} \sum_{j \in [m_i]} [ (x_{ij} - \xbar_i)^2 + (\xbar_i - \xbar)^2 ] + \sum_{i \in [k]} 2 \underbrace{\sum_{j \in [m_i]} (x_{ij} - \xbar_i)}_{=0} (\xbar_i - \xbar) \\
    &amp; = \sum_{i \in [k]} \sum_{j \in [m_i]} (x_{ij} - \xbar_i)^2 + \sum_{i \in [k]} m_i (\xbar_i - \xbar)^2 = SSE + SSB
\end{align*}
$$
</p>

<ul>
<li><span class="mathjax-exps">$SSE$</span>为各类样本与各类均值的偏差之和，越小说明每个类别各自聚集越紧密</li>
<li><span class="mathjax-exps">$SSB$</span>为各类均值与总体的偏差之和，越小说明不同类别的均值差异越小</li>
<li><span class="mathjax-exps">$F = \frac{SSB/(k-1)}{SSE/(m-k)}$</span>越小，说明类别间差异越小</li>
</ul>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="705" class="slide " data-line="705" data-h="8" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 方差分析</h5></div></div>
<p>对任意特征，根据类别标记一分为二计算<span class="mathjax-exps">$F$</span>值，判断差异是否显著</p>
<div class="threelines column9-border-right-solid head-highlight-1 tr-hover">
<table>
<thead>
<tr>
<th style="text-align:center">编号</th>
<th style="text-align:center">色泽</th>
<th style="text-align:center">根蒂</th>
<th style="text-align:center">敲声</th>
<th style="text-align:center">纹理</th>
<th style="text-align:center">脐部</th>
<th style="text-align:center">触感</th>
<th style="text-align:center">密度</th>
<th style="text-align:center">含糖率</th>
<th style="text-align:center">好瓜</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:center">青绿</td>
<td style="text-align:center">蜷缩</td>
<td style="text-align:center">浊响</td>
<td style="text-align:center">清晰</td>
<td style="text-align:center">凹陷</td>
<td style="text-align:center">硬滑</td>
<td style="text-align:center">0.697</td>
<td style="text-align:center">0.460</td>
<td style="text-align:center">是</td>
</tr>
<tr>
<td style="text-align:center">2</td>
<td style="text-align:center">乌黑</td>
<td style="text-align:center">蜷缩</td>
<td style="text-align:center">沉闷</td>
<td style="text-align:center">清晰</td>
<td style="text-align:center">凹陷</td>
<td style="text-align:center">硬滑</td>
<td style="text-align:center">0.774</td>
<td style="text-align:center">0.376</td>
<td style="text-align:center">是</td>
</tr>
<tr>
<td style="text-align:center">3</td>
<td style="text-align:center">乌黑</td>
<td style="text-align:center">稍蜷</td>
<td style="text-align:center">沉闷</td>
<td style="text-align:center">稍糊</td>
<td style="text-align:center">稍凹</td>
<td style="text-align:center">硬滑</td>
<td style="text-align:center">0.666</td>
<td style="text-align:center">0.091</td>
<td style="text-align:center">否</td>
</tr>
<tr>
<td style="text-align:center">4</td>
<td style="text-align:center">浅白</td>
<td style="text-align:center">硬挺</td>
<td style="text-align:center">清脆</td>
<td style="text-align:center">模糊</td>
<td style="text-align:center">平坦</td>
<td style="text-align:center">硬滑</td>
<td style="text-align:center">0.245</td>
<td style="text-align:center">0.057</td>
<td style="text-align:center">否</td>
</tr>
</tbody>
</table>
</div>
<p>经独热编码后，特征“色泽”变成三个特征，其中一个为色泽是否乌黑</p>
<p>对乌黑</p>
<ul>
<li>好瓜的特征<span class="mathjax-exps">$x_{11} = 0$</span>、<span class="mathjax-exps">$x_{12} = 1$</span>，均值<span class="mathjax-exps">$\xbar_1 = 0.5$</span>、偏差<span class="mathjax-exps">$0.5$</span></li>
<li>坏瓜的特征<span class="mathjax-exps">$x_{21} = 1$</span>、<span class="mathjax-exps">$x_{22} = 0$</span>，均值<span class="mathjax-exps">$\xbar_2 = 0.5$</span>、偏差<span class="mathjax-exps">$0.5$</span>，<span class="mathjax-exps">$SSE = 1$</span></li>
<li>总体均值<span class="mathjax-exps">$\xbar = 0.5$</span>，<span class="mathjax-exps">$SSB = 4 (0.5 - 0.5)^2 = 0$</span>，<span class="mathjax-exps">$F = \frac{0/(2-1)}{1/(4-2)} = 0$</span></li>
</ul>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="732" class="slide " data-line="732" data-h="8" data-v="2">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 方差分析</h5></div></div>
<p>对编号</p>
<ul>
<li>好瓜的特征<span class="mathjax-exps">$x_{11} = 1$</span>、<span class="mathjax-exps">$x_{12} = 2$</span>，均值<span class="mathjax-exps">$\xbar_1 = 1.5$</span>、偏差<span class="mathjax-exps">$0.5$</span></li>
<li>坏瓜的特征<span class="mathjax-exps">$x_{21} = 3$</span>、<span class="mathjax-exps">$x_{22} = 4$</span>，均值<span class="mathjax-exps">$\xbar_2 = 3.5$</span>、偏差<span class="mathjax-exps">$0.5$</span>，<span class="mathjax-exps">$SSE = 1$</span></li>
<li>总体均值<span class="mathjax-exps">$\xbar = 2.5$</span>，<span class="mathjax-exps">$SSB = 2(1.5-2.5)^2 + 2(3.5-2.5)^2 = 4$</span>，<span class="mathjax-exps">$F = \frac{4/(2-1)}{1/(4-2)} = 8$</span></li>
</ul>
<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">import</span> numpy <span class="token keyword">as</span> np
<span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>feature_selection <span class="token keyword">import</span> SelectKBest<span class="token punctuation">,</span> f_classif
X <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span> <span class="token comment"># 已去掉 与y完全相同的特征 和 方差为零的特征</span>
    <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0.697</span><span class="token punctuation">,</span> <span class="token number">0.460</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0.774</span><span class="token punctuation">,</span> <span class="token number">0.376</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.666</span><span class="token punctuation">,</span> <span class="token number">0.091</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0.245</span><span class="token punctuation">,</span> <span class="token number">0.057</span><span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
y <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span>
sk <span class="token operator">=</span> SelectKBest<span class="token punctuation">(</span>f_classif<span class="token punctuation">)</span>
sk<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">,</span> y<span class="token punctuation">)</span>
sk<span class="token punctuation">.</span>scores_
<span class="token punctuation">[</span> <span class="token number">8</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>  <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>
  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>  <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>
  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>  <span class="token number">1.71207075</span><span class="token punctuation">,</span> <span class="token number">57.64052606</span><span class="token punctuation">]</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section><section data-notes="" lineno="761" class="slide " data-line="761" data-h="9" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 卡方检验</h5></div></div>
<ul>
<li>若随机变量<span class="mathjax-exps">$X$</span>和<span class="mathjax-exps">$Y$</span>独立，则<span class="mathjax-exps">$p(X,Y) = p(X) p(Y)$</span></li>
<li><span class="mathjax-exps">$|p(X,Y) - p(X) p(Y)|$</span>可衡量<span class="mathjax-exps">$X$</span>和<span class="mathjax-exps">$Y$</span>的独立程度</li>
</ul>
<div class="threelines row4-border-top-solid column1-border-right-solid column3-border-right-solid column1-bold">
<table>
<thead>
<tr>
<th style="text-align:center"></th>
<th style="text-align:center">好瓜</th>
<th style="text-align:center">坏瓜</th>
<th style="text-align:center">边际概率</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">青绿</td>
<td style="text-align:center"><span class="mathjax-exps">$1, ~ (0.5 = 4 \times 0.25 \times 0.5)$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$0, (0.5 = 4 \times 0.25 \times 0.5)$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$0.25$</span></td>
</tr>
<tr>
<td style="text-align:center">乌黑</td>
<td style="text-align:center"><span class="mathjax-exps">$1, ~ (1 = 4 \times 0.5 \times 0.5)$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$1, (1 = 4 \times 0.5 \times 0.5)$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$0.5$</span></td>
</tr>
<tr>
<td style="text-align:center">浅白</td>
<td style="text-align:center"><span class="mathjax-exps">$0, ~ (0.5 = 4 \times 0.25 \times 0.5)$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$1, (0.5 = 4 \times 0.25 \times 0.5)$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$0.25$</span></td>
</tr>
<tr>
<td style="text-align:center">边际概率</td>
<td style="text-align:center"><span class="mathjax-exps">$0.5$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$0.5$</span></td>
<td style="text-align:center"><span class="mathjax-exps">$1$</span></td>
</tr>
</tbody>
</table>
</div>
<ul>
<li><span class="mathjax-exps">$X$</span>是色泽，<span class="mathjax-exps">$Y$</span>是瓜的好坏，总样本数为<span class="mathjax-exps">$4$</span></li>
<li>括号前的<span class="blue">观测频数</span><span class="mathjax-exps">$o = 4 \times p(X,Y)$</span>，括号中的<span class="blue">期望频数</span><span class="mathjax-exps">$e = 4 \times p(X) p(Y)$</span></li>
</ul>
<p>

$$
\begin{align*}
    \chi^2 = \sum_{ij} \frac{(o_{ij}-e_{ij})^2}{e_{ij}} = 4 \times \frac{(1 - 0.5)^2}{0.5} = 2
\end{align*}
$$
</p>

<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="794" class="slide " data-line="794" data-h="9" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 卡方检验</h5></div></div>
<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">import</span> numpy <span class="token keyword">as</span> np
<span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>feature_selection <span class="token keyword">import</span> SelectKBest<span class="token punctuation">,</span> chi2
X <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span>
    <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0.697</span><span class="token punctuation">,</span> <span class="token number">0.460</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0.774</span><span class="token punctuation">,</span> <span class="token number">0.376</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.666</span><span class="token punctuation">,</span> <span class="token number">0.091</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0.245</span><span class="token punctuation">,</span> <span class="token number">0.057</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">)</span>
y <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span>

sk <span class="token operator">=</span> SelectKBest<span class="token punctuation">(</span>chi2<span class="token punctuation">,</span> k<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">)</span>
sk<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">,</span> y<span class="token punctuation">)</span>
sk<span class="token punctuation">.</span>scores_
<span class="token punctuation">[</span><span class="token number">1.6</span>       <span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>
 <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>
 <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>
 <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">0.13165407</span><span class="token punctuation">,</span> <span class="token number">0.48104065</span><span class="token punctuation">]</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><p>独热编码将色泽分成了三个特征，其卡方检验值为 0 + 1 + 1 = 2</p>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section><section data-notes="" lineno="822" class="slide " data-line="822" data-h="10" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 互信息</h5></div></div>
<p>熵 (entropy) 可以度量<span class="blue">随机变量的不确定性</span></p>
<p>

$$
\begin{align*}
    H(X) = - \sum_{i \in [m]} p(x_i) \log p(x_i) = - \Ebb [\log p(X)], \quad 0 \log 0 \triangleq 0
\end{align*}
$$
</p>

<p>当<span class="mathjax-exps">$p(x_1) = \cdots = p(x_m) = \frac{1}{m}$</span>时，熵达到最大值<span class="mathjax-exps">$\log m$</span></p>
<p>拉格朗日函数<span class="mathjax-exps">$L = - \sum_{i \in [m]} p(x_i) \log p(x_i) - \alpha (\sum_{i \in [m]} p(x_i) - 1)$</span>，令</p>
<p>

$$
\begin{align*}
    \frac{\partial L}{\partial p(x_i)} = - \log p(x_i) - 1 - \alpha = 0 ~ \Longrightarrow ~ p(x_i) = \exp(-1-\alpha) = \frac{1}{m}
\end{align*}
$$
</p>

<p>当某个<span class="mathjax-exps">$p(x_i) = 1$</span>、其余为零时，熵达到最小值<span class="mathjax-exps">$0$</span>，此时无不确定性</p>
<p>

$$
\begin{align*}
    H(X) = \sum_{i \in [m]} p(x_i) \log \frac{1}{p(x_i)} \ge \sum_{i \in [m]} p(x_i) \log 1 = 0
\end{align*}
$$
</p>

<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="866" class="slide " data-line="866" data-h="10" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 互信息</h5></div></div>
<p>联合熵：两个随机变量的联合不确定性</p>
<p>

$$
\begin{align*}
    H(X,Y) = - \sum_{i \in [m]} \sum_{j \in [n]} p(x_i,y_j) \log p(x_i,y_j) = - \Ebb [\log p(X,Y)]
\end{align*}
$$
</p>

<p>条件熵：给定一个随机变量的取值后，另一个随机变量的不确定性</p>
<p>

$$
\begin{align*}
    H(X|Y) &amp; = H(X,Y) - H(Y) \\
    &amp; = - \sum_{i \in [m]} \sum_{j \in [n]} p(x_i,y_j) \log p(x_i,y_j) + \sum_{j \in [n]} \class{blue}{p(y_j)} \log p(y_j) \\
    &amp; = - \sum_{i \in [m]} \sum_{j \in [n]} p(x_i,y_j) \log p(x_i,y_j) + \sum_{j \in [n]} \class{blue}{\sum_{i \in [m]} p(x_i,y_j)} \log p(y_j) \\
    &amp; = - \sum_{i \in [m]} \sum_{j \in [n]} p(x_i,y_j) \log p(x_i|y_j) \\
    &amp; = - \Ebb [\log p(X|Y)]
\end{align*}
$$
</p>

<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="900" class="slide " data-line="900" data-h="10" data-v="2">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 互信息</h5></div></div>
<p>互信息：两个随机变量之间的相关程度</p>
<p>

$$
\begin{align*}
    I(X;Y) &amp; = H(X) - H(X|Y) \\
    &amp; = - \sum_{i \in [m]} \class{blue}{p(x_i)} \log p(x_i) + \sum_{i \in [m]} \sum_{j \in [n]} p(x_i,y_j) \log p(x_i|y_j) \\
    &amp; = - \sum_{i \in [m]} \class{blue}{\sum_{j \in [n]} p(x_i,y_j)} \log p(x_i) + \sum_{i \in [m]} \sum_{j \in [n]} p(x_i,y_j) \log \frac{p(x_i,y_j)}{p(y_j)} \\
    &amp; = - \sum_{i \in [m]} \sum_{j \in [n]} p(x_i,y_j) \log \frac{p(x_i)p(y_j)}{p(x_i,y_j)} = \Ebb \left[ \log \frac{p(X,Y)}{p(X)p(Y)} \right]
\end{align*}
$$
</p>

<p>互信息 (交集) 与熵、联合熵 (并集)、条件熵 (差集) 的关系为</p>
<p>

$$
\begin{align*}
    I(X;Y) &amp; = H(X) - H(X|Y) = H(Y) - H(Y|X) \\
    &amp; = H(X) + H(Y) - H(X,Y) \\
    &amp; = H(X,Y) - H(X|Y) - H(Y|X)
\end{align*}
$$
</p>

<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="935" class="slide " data-line="935" data-h="10" data-v="3">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 互信息</h5></div></div>
<p>利用每个特征和类别标记之间的互信息进行挑选</p>
<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">import</span> numpy <span class="token keyword">as</span> np
<span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>feature_selection <span class="token keyword">import</span> SelectKBest<span class="token punctuation">,</span> mutual_info_classif

X <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span>
    <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.697</span><span class="token punctuation">,</span> <span class="token number">0.460</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.774</span><span class="token punctuation">,</span> <span class="token number">0.376</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.666</span><span class="token punctuation">,</span> <span class="token number">0.091</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.245</span><span class="token punctuation">,</span> <span class="token number">0.057</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">)</span>
y <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span>

sk <span class="token operator">=</span> SelectKBest<span class="token punctuation">(</span>mutual_info_classif<span class="token punctuation">)</span>
sk<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">,</span> y<span class="token punctuation">)</span>
sk<span class="token punctuation">.</span>scores_
<span class="token punctuation">[</span><span class="token number">0.58333333</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">0.20833333</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>
 <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">0.83333333</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">0.20833333</span><span class="token punctuation">,</span>
 <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">0.83333333</span><span class="token punctuation">,</span> <span class="token number">0.20833333</span><span class="token punctuation">,</span> <span class="token number">0.83333333</span><span class="token punctuation">,</span> <span class="token number">0.08333333</span><span class="token punctuation">,</span>
 <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token number">0.83333333</span><span class="token punctuation">]</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section data-notes="" lineno="964" class="slide " data-line="964" data-h="11" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 线性相关性</h5></div></div>
<p>

$$
\begin{align*}
    \rho_{xy} = \frac{\cov(x,y)}{\sigma_x \sigma_y} = \frac{\sum_{i \in [m]} (x_i - \xbar)(y_i - \ybar)}{\sqrt{\sum_{i \in [m]} (x_i - \xbar)^2} \sqrt{\sum_{i \in [m]} (y_i - \ybar)^2}}
\end{align*}
$$
</p>

<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">import</span> numpy <span class="token keyword">as</span> np

X <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span> <span class="token comment"># 最后一列为y</span>
    <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0.697</span><span class="token punctuation">,</span> <span class="token number">0.460</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0.774</span><span class="token punctuation">,</span> <span class="token number">0.376</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.666</span><span class="token punctuation">,</span> <span class="token number">0.091</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0.245</span><span class="token punctuation">,</span> <span class="token number">0.057</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">)</span>

corr <span class="token operator">=</span> np<span class="token punctuation">.</span>corrcoef<span class="token punctuation">(</span>X<span class="token punctuation">,</span> rowvar<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">)</span>
corr<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token punctuation">:</span><span class="token punctuation">]</span>
<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">0.89442719</span><span class="token punctuation">,</span>  <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">0.57735027</span><span class="token punctuation">,</span>  <span class="token number">0.57735027</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">0.57735027</span><span class="token punctuation">,</span>
 <span class="token operator">-</span><span class="token number">0.57735027</span><span class="token punctuation">,</span>  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>  <span class="token number">0</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span>  <span class="token number">0.57735027</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">0.57735027</span><span class="token punctuation">,</span>
 <span class="token operator">-</span><span class="token number">0.57735027</span><span class="token punctuation">,</span>  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">0.57735027</span><span class="token punctuation">,</span>  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">0.57735027</span><span class="token punctuation">,</span>
 <span class="token operator">-</span><span class="token number">0.57735027</span><span class="token punctuation">,</span>  <span class="token number">0.67912971</span><span class="token punctuation">,</span>  <span class="token number">0.9830899</span> <span class="token punctuation">,</span>  <span class="token number">1</span><span class="token punctuation">.</span>        <span class="token punctuation">]</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section><section data-notes="" lineno="998" class="slide " data-line="998" data-h="12" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 稀疏范数</h5></div></div>
<p>范数<span class="mathjax-exps">$\|\cdot\|$</span>：长度概念的推广，对任意标量<span class="mathjax-exps">$\alpha$</span>和向量空间中的<span class="mathjax-exps">$\uv, \vv$</span></p>
<ul>
<li>(半)正定性：<span class="mathjax-exps">$\| \uv \| \ge 0$</span>，且<span class="mathjax-exps">$\| \uv \| = 0$</span>当且仅当<span class="mathjax-exps">$\uv = \zerov$</span></li>
<li>齐次性：<span class="mathjax-exps">$\| \alpha \uv \| = |\alpha| \cdot \| \uv \|$</span></li>
<li>三角不等式：<span class="mathjax-exps">$\| \uv + \vv \| \le \| \uv \| + \| \vv \|$</span></li>
</ul>
<br>
<p>机器学习中常用的是向量的<span class="mathjax-exps">$\ell_p$</span>范数：<span class="mathjax-exps">$\| \wv \|_p \triangleq (\sum_{i \in d} |w_i|^p)^{1/p}$</span></p>
<ul>
<li><span class="mathjax-exps">$\ell_1$</span>范数：<span class="mathjax-exps">$\| \wv \|_1 = \sum_{i \in d} |w_i|$</span>，各元素绝对值之和</li>
<li><span class="mathjax-exps">$\ell_2$</span>范数：<span class="mathjax-exps">$\| \wv \|_2 = \sqrt{\sum_{i \in d} w_i^2}$</span>，各元素平方和的正平方根</li>
<li><span class="mathjax-exps">$\ell_\infty$</span>范数：<span class="mathjax-exps">$\| \wv \|_\infty = \max_{i \in d} |w_i|$</span>，各元素绝对值的最大值</li>
</ul>
<br>
<p>当<span class="mathjax-exps">$0 \le p &lt; 1$</span>时，<span class="mathjax-exps">$\| \cdot \|_p$</span>不再是合法的范数，不满足三角不等式</p>
<ul>
<li><span class="mathjax-exps">$\ell_0$</span>范数：<span class="mathjax-exps">$\| \wv \|_0 = |\{ i \in d \mid w_i \ne 0 \}|$</span>，非零元素的个数</li>
</ul>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="1024" class="slide " data-line="1024" data-h="12" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 稀疏范数</h5></div></div>
<p><span class="mathjax-exps">$\Rbb^2$</span>上的 5 个<span class="mathjax-exps">$\ell_p$</span>范数球<span class="mathjax-exps">$\{ \wv \mid \| \wv \|_p \le t \}$</span></p>
<img src="data:image/svg+xml;charset=utf-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgd2lkdGg9IjQxMy44NjcxOXB0IgogICBoZWlnaHQ9Ijg2Ljc3OTE5cHQiCiAgIHZpZXdCb3g9IjAgMCA0MTMuODY3MTkgODYuNzc5MTkiCiAgIHZlcnNpb249IjEuMiIKICAgaWQ9InN2ZzE1NSIKICAgc29kaXBvZGk6ZG9jbmFtZT0ibm9ybS5zdmciCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMS4xICgzYmY1YWUwZDI1LCAyMDIxLTA5LTIwKSIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJuYW1lZHZpZXcxNTciCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0iMCIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHQiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuODI2NzA0NTUiCiAgICAgaW5rc2NhcGU6Y3g9IjI3Ni4zOTg2MyIKICAgICBpbmtzY2FwZTpjeT0iNDMxLjgzNTA1IgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMzg0MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIyMTA2IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSI1NCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzE1NSIgLz4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDAiPgogICAgPGcKICAgICAgIGlkPSJnMzgiPgogICAgICA8c3ltYm9sCiAgICAgICAgIG92ZXJmbG93PSJ2aXNpYmxlIgogICAgICAgICBpZD0iZ2x5cGgwLTAiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9InN0cm9rZTpub25lIgogICAgICAgICAgIGQ9IiIKICAgICAgICAgICBpZD0icGF0aDIiIC8+CiAgICAgIDwvc3ltYm9sPgogICAgICA8c3ltYm9sCiAgICAgICAgIG92ZXJmbG93PSJ2aXNpYmxlIgogICAgICAgICBpZD0iZ2x5cGgwLTEiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9InN0cm9rZTpub25lIgogICAgICAgICAgIGQ9Im0gMC4xNzE4NzUsLTEuMDQ2ODc1IGMgLTAuMDMxMjUsMC4wMzEyNSAtMC4wNjI1LDAuMDc4MTI1IC0wLjA2MjUsMC4xMDkzNzUgMCwwLjA2MjUgMC4wNjI1LDAuMTQwNjI1IDAuMTI1LDAuMTQwNjI1IDAuMDYyNSwwIDAuMDkzNzUsLTAuMDMxMjUgMC4zOTA2MjUsLTAuMzI4MTI1IEMgMC43MDMxMjUsLTEuMjAzMTI1IDAuOTA2MjUsLTEuMzkwNjI1IDEsLTEuNDg0Mzc1IDEuMTA5Mzc1LC0wLjY1NjI1IDEuNDA2MjUsMC4xMjUgMi4xNzE4NzUsMC4xMjUgMi41OTM3NSwwLjEyNSAyLjk2ODc1LC0wLjEwOTM3NSAzLjE4NzUsLTAuMjY1NjI1IDMuMzI4MTI1LC0wLjM3NSAzLjgyODEyNSwtMC43ODEyNSAzLjgyODEyNSwtMC44OTA2MjUgYyAwLC0wLjAzMTI1IC0wLjAzMTI1LC0wLjEyNSAtMC4xMjUsLTAuMTI1IC0wLjAzMTI1LDAgLTAuMDQ2ODc1LDAgLTAuMTQwNjI1LDAuMDkzNzUgLTAuNjcxODc1LDAuNjU2MjUgLTEuMDYyNSwwLjgxMjUgLTEuMzc1LDAuODEyNSAtMC40Njg3NSwwIC0wLjY0MDYyNSwtMC41NDY4NzUgLTAuNjQwNjI1LC0xLjM1OTM3NSAwLC0wLjA2MjUgMC4wMzEyNSwtMC41NDY4NzUgMC4wNjI1LC0wLjU5Mzc1IEMgMS42MjUsLTIuMDkzNzUgMS42MjUsLTIuMTI1IDEuODQzNzUsLTIuMzI4MTI1IGMgMC44NDM3NSwtMC44NTkzNzUgMi4zMjgxMjUsLTIuNjI1IDIuMzI4MTI1LC00LjI1IDAsLTAuMTg3NSAwLC0wLjgyODEyNSAtMC42MDkzNzUsLTAuODI4MTI1IC0wLjg3NSwwIC0xLjY1NjI1LDEuNzM0Mzc1IC0xLjc1LDEuOTg0Mzc1IEMgMS4yOTY4NzUsLTQuMjgxMjUgMC45Njg3NSwtMy4wNjI1IDAuOTY4NzUsLTEuODEyNSBaIE0gMS42NTYyNSwtMi41MTU2MjUgQyAxLjY4NzUsLTIuNjI1IDIuMTI1LC00Ljk1MzEyNSAyLjczNDM3NSwtNi4xODc1IGMgMC4yODEyNSwtMC41NjI1IDAuNSwtMC45ODQzNzUgMC44MjgxMjUsLTAuOTg0Mzc1IDAuMzU5Mzc1LDAgMC4zNTkzNzUsMC4zNzUgMC4zNTkzNzUsMC41NDY4NzUgMCwxLjc1IC0xLjc2NTYyNSwzLjU5Mzc1IC0yLjI2NTYyNSw0LjEwOTM3NSB6IG0gMCwwIgogICAgICAgICAgIGlkPSJwYXRoNSIgLz4KICAgICAgPC9zeW1ib2w+CiAgICAgIDxzeW1ib2wKICAgICAgICAgb3ZlcmZsb3c9InZpc2libGUiCiAgICAgICAgIGlkPSJnbHlwaDEtMCI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiCiAgICAgICAgICAgZD0iIgogICAgICAgICAgIGlkPSJwYXRoOCIgLz4KICAgICAgPC9zeW1ib2w+CiAgICAgIDxzeW1ib2wKICAgICAgICAgb3ZlcmZsb3c9InZpc2libGUiCiAgICAgICAgIGlkPSJnbHlwaDEtMSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiCiAgICAgICAgICAgZD0iTSAzLjU5Mzc1LC0yLjIxODc1IEMgMy41OTM3NSwtMi45ODQzNzUgMy41LC0zLjU0Njg3NSAzLjE4NzUsLTQuMDMxMjUgMi45Njg3NSwtNC4zNDM3NSAyLjUzMTI1LC00LjYyNSAxLjk4NDM3NSwtNC42MjUgYyAtMS42MjUsMCAtMS42MjUsMS45MDYyNSAtMS42MjUsMi40MDYyNSAwLDAuNSAwLDIuMzU5Mzc1IDEuNjI1LDIuMzU5Mzc1IDEuNjA5Mzc1LDAgMS42MDkzNzUsLTEuODU5Mzc1IDEuNjA5Mzc1LC0yLjM1OTM3NSB6IE0gMS45ODQzNzUsLTAuMDYyNSBjIC0wLjMyODEyNSwwIC0wLjc1LC0wLjE4NzUgLTAuODkwNjI1LC0wLjc1IEMgMSwtMS4yMTg3NSAxLC0xLjc5Njg3NSAxLC0yLjMxMjUgMSwtMi44MjgxMjUgMSwtMy4zNTkzNzUgMS4wOTM3NSwtMy43MzQzNzUgMS4yNSwtNC4yODEyNSAxLjY4NzUsLTQuNDM3NSAxLjk4NDM3NSwtNC40Mzc1IGMgMC4zNzUsMCAwLjczNDM3NSwwLjIzNDM3NSAwLjg1OTM3NSwwLjY0MDYyNSAwLjEwOTM3NSwwLjM3NSAwLjEyNSwwLjg3NSAwLjEyNSwxLjQ4NDM3NSAwLDAuNTE1NjI1IDAsMS4wMzEyNSAtMC4wOTM3NSwxLjQ2ODc1IC0wLjE0MDYyNSwwLjY0MDYyNSAtMC42MDkzNzUsMC43ODEyNSAtMC44OTA2MjUsMC43ODEyNSB6IG0gMCwwIgogICAgICAgICAgIGlkPSJwYXRoMTEiIC8+CiAgICAgIDwvc3ltYm9sPgogICAgICA8c3ltYm9sCiAgICAgICAgIG92ZXJmbG93PSJ2aXNpYmxlIgogICAgICAgICBpZD0iZ2x5cGgxLTIiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9InN0cm9rZTpub25lIgogICAgICAgICAgIGQ9Im0gMS4wNzgxMjUsLTMuODkwNjI1IGMgMC4zNTkzNzUsMC4wOTM3NSAwLjU2MjUsMC4wOTM3NSAwLjY3MTg3NSwwLjA5Mzc1IDAuOTIxODc1LDAgMS40Njg3NSwtMC42MjUgMS40Njg3NSwtMC43MzQzNzUgMCwtMC4wNzgxMjUgLTAuMDQ2ODc1LC0wLjA5Mzc1IC0wLjA3ODEyNSwtMC4wOTM3NSAtMC4wMTU2MjUsMCAtMC4wMzEyNSwwIC0wLjA2MjUsMC4wMTU2MjUgLTAuMTcxODc1LDAuMDYyNSAtMC41MzEyNSwwLjIwMzEyNSAtMS4wNDY4NzUsMC4yMDMxMjUgLTAuMjAzMTI1LDAgLTAuNTYyNSwtMC4wMTU2MjUgLTEuMDE1NjI1LC0wLjE4NzUgQyAwLjkzNzUsLTQuNjI1IDAuOTIxODc1LC00LjYyNSAwLjkyMTg3NSwtNC42MjUgYyAtMC4wOTM3NSwwIC0wLjA5Mzc1LDAuMDc4MTI1IC0wLjA5Mzc1LDAuMTg3NSB2IDIuMDQ2ODc1IGMgMCwwLjEyNSAwLDAuMjAzMTI1IDAuMTA5Mzc1LDAuMjAzMTI1IDAuMDYyNSwwIDAuMDc4MTI1LDAgMC4xNDA2MjUsLTAuMDkzNzUgMC4yOTY4NzUsLTAuMzc1IDAuNzM0Mzc1LC0wLjQzNzUgMC45Njg3NSwtMC40Mzc1IDAuNDIxODc1LDAgMC42MDkzNzUsMC4zMjgxMjUgMC42NDA2MjUsMC4zOTA2MjUgMC4xMjUsMC4yMzQzNzUgMC4xNzE4NzUsMC41IDAuMTcxODc1LDAuOTA2MjUgMCwwLjIwMzEyNSAwLDAuNjA5Mzc1IC0wLjIxODc1LDAuOTIxODc1IC0wLjE3MTg3NSwwLjI1IC0wLjQ2ODc1LDAuNDIxODc1IC0wLjgxMjUsMC40MjE4NzUgLTAuNDUzMTI1LDAgLTAuOTIxODc1LC0wLjI1IC0xLjA5Mzc1LC0wLjcxODc1IDAuMjY1NjI1LDAuMDE1NjI1IDAuNDA2MjUsLTAuMTU2MjUgMC40MDYyNSwtMC4zNDM3NSAwLC0wLjI5Njg3NSAtMC4yNjU2MjUsLTAuMzQzNzUgLTAuMzU5Mzc1LC0wLjM0Mzc1IDAsMCAtMC4zNDM3NSwwIC0wLjM0Mzc1LDAuMzc1IDAsMC42MjUgMC41NzgxMjUsMS4yNSAxLjQwNjI1LDEuMjUgMC44OTA2MjUsMCAxLjY3MTg3NSwtMC42NTYyNSAxLjY3MTg3NSwtMS41NDY4NzUgMCwtMC43ODEyNSAtMC41OTM3NSwtMS41IC0xLjQ1MzEyNSwtMS41IC0wLjMxMjUsMCAtMC42NzE4NzUsMC4wNjI1IC0wLjk4NDM3NSwwLjMyODEyNSB6IG0gMCwwIgogICAgICAgICAgIGlkPSJwYXRoMTQiIC8+CiAgICAgIDwvc3ltYm9sPgogICAgICA8c3ltYm9sCiAgICAgICAgIG92ZXJmbG93PSJ2aXNpYmxlIgogICAgICAgICBpZD0iZ2x5cGgxLTMiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9InN0cm9rZTpub25lIgogICAgICAgICAgIGQ9Im0gMi4zMjgxMjUsLTQuNDM3NSBjIDAsLTAuMTg3NSAwLC0wLjE4NzUgLTAuMjAzMTI1LC0wLjE4NzUgLTAuNDUzMTI1LDAuNDM3NSAtMS4wNzgxMjUsMC40Mzc1IC0xLjM1OTM3NSwwLjQzNzUgdiAwLjI1IGMgMC4xNTYyNSwwIDAuNjI1LDAgMSwtMC4xODc1IHYgMy41NDY4NzUgYyAwLDAuMjM0Mzc1IDAsMC4zMjgxMjUgLTAuNjg3NSwwLjMyODEyNSBIIDAuODEyNSBWIDAgYyAwLjEyNSwwIDAuOTg0Mzc1LC0wLjAzMTI1IDEuMjM0Mzc1LC0wLjAzMTI1IDAuMjE4NzUsMCAxLjA5Mzc1LDAuMDMxMjUgMS4yNSwwLjAzMTI1IFYgLTAuMjUgSCAzLjAzMTI1IGMgLTAuNzAzMTI1LDAgLTAuNzAzMTI1LC0wLjA5Mzc1IC0wLjcwMzEyNSwtMC4zMjgxMjUgeiBtIDAsMCIKICAgICAgICAgICBpZD0icGF0aDE3IiAvPgogICAgICA8L3N5bWJvbD4KICAgICAgPHN5bWJvbAogICAgICAgICBvdmVyZmxvdz0idmlzaWJsZSIKICAgICAgICAgaWQ9ImdseXBoMS00Ij4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZSIKICAgICAgICAgICBkPSJNIDMuNTE1NjI1LC0xLjI2NTYyNSBIIDMuMjgxMjUgYyAtMC4wMTU2MjUsMC4xNTYyNSAtMC4wOTM3NSwwLjU2MjUgLTAuMTg3NSwwLjYyNSBDIDMuMDQ2ODc1LC0wLjU5Mzc1IDIuNTE1NjI1LC0wLjU5Mzc1IDIuNDA2MjUsLTAuNTkzNzUgSCAxLjEyNSBjIDAuNzM0Mzc1LC0wLjY0MDYyNSAwLjk4NDM3NSwtMC44NDM3NSAxLjM5MDYyNSwtMS4xNzE4NzUgMC41MTU2MjUsLTAuNDA2MjUgMSwtMC44NDM3NSAxLC0xLjUgMCwtMC44NDM3NSAtMC43MzQzNzUsLTEuMzU5Mzc1IC0xLjYyNSwtMS4zNTkzNzUgLTAuODU5Mzc1LDAgLTEuNDUzMTI1LDAuNjA5Mzc1IC0xLjQ1MzEyNSwxLjI1IDAsMC4zNDM3NSAwLjI5Njg3NSwwLjM5MDYyNSAwLjM3NSwwLjM5MDYyNSAwLjE1NjI1LDAgMC4zNTkzNzUsLTAuMTI1IDAuMzU5Mzc1LC0wLjM3NSAwLC0wLjEyNSAtMC4wNDY4NzUsLTAuMzc1IC0wLjQwNjI1LC0wLjM3NSBDIDAuOTg0Mzc1LC00LjIxODc1IDEuNDUzMTI1LC00LjM3NSAxLjc4MTI1LC00LjM3NSBjIDAuNzAzMTI1LDAgMS4wNjI1LDAuNTQ2ODc1IDEuMDYyNSwxLjEwOTM3NSAwLDAuNjA5Mzc1IC0wLjQzNzUsMS4wNzgxMjUgLTAuNjU2MjUsMS4zMjgxMjUgTCAwLjUxNTYyNSwtMC4yNjU2MjUgQyAwLjQzNzUsLTAuMjAzMTI1IDAuNDM3NSwtMC4xODc1IDAuNDM3NSwwIGggMi44NzUgeiBtIDAsMCIKICAgICAgICAgICBpZD0icGF0aDIwIiAvPgogICAgICA8L3N5bWJvbD4KICAgICAgPHN5bWJvbAogICAgICAgICBvdmVyZmxvdz0idmlzaWJsZSIKICAgICAgICAgaWQ9ImdseXBoMS01Ij4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZSIKICAgICAgICAgICBkPSJtIDMuNjg3NSwtMS4xNDA2MjUgdiAtMC4yNSBIIDIuOTA2MjUgViAtNC41IGMgMCwtMC4xNDA2MjUgMCwtMC4yMDMxMjUgLTAuMTQwNjI1LC0wLjIwMzEyNSAtMC4wOTM3NSwwIC0wLjEyNSwwIC0wLjE4NzUsMC4xMDkzNzUgbCAtMi4zMTI1LDMuMjAzMTI1IHYgMC4yNSBoIDIuMDYyNSB2IDAuNTYyNSBjIDAsMC4yNSAwLDAuMzI4MTI1IC0wLjU3ODEyNSwwLjMyODEyNSBIIDEuNTYyNSBWIDAgQyAxLjkyMTg3NSwtMC4wMTU2MjUgMi4zNTkzNzUsLTAuMDMxMjUgMi42MDkzNzUsLTAuMDMxMjUgMi44NzUsLTAuMDMxMjUgMy4zMTI1LC0wLjAxNTYyNSAzLjY3MTg3NSwwIHYgLTAuMjUgaCAtMC4xODc1IEMgMi45MDYyNSwtMC4yNSAyLjkwNjI1LC0wLjMyODEyNSAyLjkwNjI1LC0wLjU3ODEyNSB2IC0wLjU2MjUgeiBNIDIuMzc1LC0zLjkzNzUgdiAyLjU0Njg3NSBIIDAuNTMxMjUgWiBtIDAsMCIKICAgICAgICAgICBpZD0icGF0aDIzIiAvPgogICAgICA8L3N5bWJvbD4KICAgICAgPHN5bWJvbAogICAgICAgICBvdmVyZmxvdz0idmlzaWJsZSIKICAgICAgICAgaWQ9ImdseXBoMi0wIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZSIKICAgICAgICAgICBkPSIiCiAgICAgICAgICAgaWQ9InBhdGgyNiIgLz4KICAgICAgPC9zeW1ib2w+CiAgICAgIDxzeW1ib2wKICAgICAgICAgb3ZlcmZsb3c9InZpc2libGUiCiAgICAgICAgIGlkPSJnbHlwaDItMSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiCiAgICAgICAgICAgZD0ibSAxLjU3ODEyNSwtMC4zOTA2MjUgYyAwLC0wLjI1IC0wLjIwMzEyNSwtMC40MDYyNSAtMC4zOTA2MjUsLTAuNDA2MjUgLTAuMjM0Mzc1LDAgLTAuNDA2MjUsMC4xODc1IC0wLjQwNjI1LDAuMzkwNjI1IDAsMC4yNSAwLjIwMzEyNSwwLjQwNjI1IDAuMzkwNjI1LDAuNDA2MjUgMC4yMzQzNzUsMCAwLjQwNjI1LC0wLjE4NzUgMC40MDYyNSwtMC4zOTA2MjUgeiBtIDAsMCIKICAgICAgICAgICBpZD0icGF0aDI5IiAvPgogICAgICA8L3N5bWJvbD4KICAgICAgPHN5bWJvbAogICAgICAgICBvdmVyZmxvdz0idmlzaWJsZSIKICAgICAgICAgaWQ9ImdseXBoMy0wIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZSIKICAgICAgICAgICBkPSIiCiAgICAgICAgICAgaWQ9InBhdGgzMiIgLz4KICAgICAgPC9zeW1ib2w+CiAgICAgIDxzeW1ib2wKICAgICAgICAgb3ZlcmZsb3c9InZpc2libGUiCiAgICAgICAgIGlkPSJnbHlwaDMtMSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiCiAgICAgICAgICAgZD0ibSA0LjAzMTI1LC0xLjkwNjI1IGMgLTAuMzc1LC0wLjQzNzUgLTAuNDg0Mzc1LC0wLjU0Njg3NSAtMC43NSwtMC43MzQzNzUgLTAuNDIxODc1LC0wLjMxMjUgLTAuODc1LC0wLjQzNzUgLTEuMjUsLTAuNDM3NSAtMC44NzUsMCAtMS41LDAuNzUgLTEuNSwxLjU3ODEyNSAwLDAuODEyNSAwLjYwOTM3NSwxLjU2MjUgMS40Njg3NSwxLjU2MjUgMC45Njg3NSwwIDEuNjU2MjUsLTAuNzgxMjUgMS45MDYyNSwtMS4xNTYyNSAwLjM1OTM3NSwwLjQzNzUgMC40ODQzNzUsMC41NDY4NzUgMC43MzQzNzUsMC43MzQzNzUgMC40Mzc1LDAuMzEyNSAwLjg3NSwwLjQyMTg3NSAxLjI2NTYyNSwwLjQyMTg3NSAwLjg1OTM3NSwwIDEuNDg0Mzc1LC0wLjczNDM3NSAxLjQ4NDM3NSwtMS41NjI1IDAsLTAuODI4MTI1IC0wLjU5Mzc1LC0xLjU3ODEyNSAtMS40Njg3NSwtMS41NzgxMjUgLTAuOTY4NzUsMCAtMS42NDA2MjUsMC43OTY4NzUgLTEuODkwNjI1LDEuMTcxODc1IHogbSAwLjIxODc1LDAuMjUgYyAwLjI4MTI1LC0wLjQ1MzEyNSAwLjg5MDYyNSwtMS4xNTYyNSAxLjczNDM3NSwtMS4xNTYyNSAwLjcxODc1LDAgMS4yMTg3NSwwLjY0MDYyNSAxLjIxODc1LDEuMzEyNSAwLDAuNjU2MjUgLTAuNTQ2ODc1LDEuMTg3NSAtMS4xODc1LDEuMTg3NSAtMC42NTYyNSwwIC0xLjA5Mzc1LC0wLjUzMTI1IC0xLjc2NTYyNSwtMS4zNDM3NSB6IE0gMy42NzE4NzUsLTEuMzU5Mzc1IEMgMy40MDYyNSwtMC45MDYyNSAyLjc5Njg3NSwtMC4xODc1IDEuOTM3NSwtMC4xODc1IGMgLTAuNzE4NzUsMCAtMS4yMDMxMjUsLTAuNjQwNjI1IC0xLjIwMzEyNSwtMS4zMTI1IDAsLTAuNjcxODc1IDAuNTQ2ODc1LC0xLjE4NzUgMS4xODc1LC0xLjE4NzUgMC42NDA2MjUsMCAxLjA5Mzc1LDAuNTMxMjUgMS43NSwxLjMyODEyNSB6IG0gMCwwIgogICAgICAgICAgIGlkPSJwYXRoMzUiIC8+CiAgICAgIDwvc3ltYm9sPgogICAgPC9nPgogIDwvZGVmcz4KICA8ZwogICAgIGlkPSJnMzUwIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC05OS4wNjY0MSwtNzIuMzk4NDM4KSI+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzU3NmU3MztzdHJva2Utd2lkdGg6MC43OTcwMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAxMzUuOTE3OTcsMTQ2LjEwMTU2IFYgNzQuOTg4MjgxIgogICAgICAgaWQ9InBhdGg0NCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojNTc2ZTczO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgZD0ibSAxMzUuOTE3OTcsNzIuMzk4NDM4IC0yLjA3MDMxLDQuMTQ0NTMxIDIuMDcwMzEsLTEuNTU0Njg4IDIuMDc0MjIsMS41NTQ2ODgiCiAgICAgICBpZD0icGF0aDQ2IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1NzZlNzM7c3Ryb2tlLXdpZHRoOjAuNzk3MDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gOTkuMDY2NDEsMTA5LjI1IGggNzEuMTEzMjgiCiAgICAgICBpZD0icGF0aDQ4IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiM1NzZlNzM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICBkPSJtIDE3Mi43Njk1MywxMDkuMjUgLTQuMTQ0NTMsLTIuMDc0MjIgMS41NTQ2OSwyLjA3NDIyIC0xLjU1NDY5LDIuMDcwMzEiCiAgICAgICBpZD0icGF0aDUwIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1NzZlNzM7c3Ryb2tlLXdpZHRoOjAuNzk3MDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMjIwLjk2MDk0LDE0Ni4xMDE1NiBWIDc0Ljk4ODI4MSIKICAgICAgIGlkPSJwYXRoNTIiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzU3NmU3MztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgIGQ9Im0gMjIwLjk2MDk0LDcyLjM5ODQzOCAtMi4wNzQyMiw0LjE0NDUzMSAyLjA3NDIyLC0xLjU1NDY4OCAyLjA3MDMxLDEuNTU0Njg4IgogICAgICAgaWQ9InBhdGg1NCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNTc2ZTczO3N0cm9rZS13aWR0aDowLjc5NzAxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDE4NC4xMDkzNywxMDkuMjUgaCA3MS4xMDkzOCIKICAgICAgIGlkPSJwYXRoNTYiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzU3NmU3MztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgIGQ9Im0gMjU3LjgwODU5LDEwOS4yNSAtNC4xNDA2MiwtMi4wNzQyMiAxLjU1MDc4LDIuMDc0MjIgLTEuNTUwNzgsMi4wNzAzMSIKICAgICAgIGlkPSJwYXRoNTgiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzU3NmU3MztzdHJva2Utd2lkdGg6MC43OTcwMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMDYsMTQ2LjEwMTU2IFYgNzQuOTg4MjgxIgogICAgICAgaWQ9InBhdGg2MCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojNTc2ZTczO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgZD0ibSAzMDYsNzIuMzk4NDM4IC0yLjA3MDMxLDQuMTQ0NTMxIDIuMDcwMzEsLTEuNTU0Njg4IDIuMDcwMzEsMS41NTQ2ODgiCiAgICAgICBpZD0icGF0aDYyIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1NzZlNzM7c3Ryb2tlLXdpZHRoOjAuNzk3MDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMjY5LjE0ODQ0LDEwOS4yNSBoIDcxLjExMzI4IgogICAgICAgaWQ9InBhdGg2NCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojNTc2ZTczO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgZD0ibSAzNDIuODUxNTYsMTA5LjI1IC00LjE0NDUzLC0yLjA3NDIyIDEuNTU0NjksMi4wNzQyMiAtMS41NTQ2OSwyLjA3MDMxIgogICAgICAgaWQ9InBhdGg2NiIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNTc2ZTczO3N0cm9rZS13aWR0aDowLjc5NzAxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDM5MS4wMzkwNiwxNDYuMTAxNTYgViA3NC45ODgyODEiCiAgICAgICBpZD0icGF0aDY4IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiM1NzZlNzM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICBkPSJtIDM5MS4wMzkwNiw3Mi4zOTg0MzggLTIuMDcwMzEsNC4xNDQ1MzEgMi4wNzAzMSwtMS41NTQ2ODggMi4wNzQyMiwxLjU1NDY4OCIKICAgICAgIGlkPSJwYXRoNzAiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzU3NmU3MztzdHJva2Utd2lkdGg6MC43OTcwMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAzNTQuMTkxNDEsMTA5LjI1IGggNzEuMTA5MzciCiAgICAgICBpZD0icGF0aDcyIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiM1NzZlNzM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICBkPSJtIDQyNy44OTA2MiwxMDkuMjUgLTQuMTQ0NTMsLTIuMDc0MjIgMS41NTQ2OSwyLjA3NDIyIC0xLjU1NDY5LDIuMDcwMzEiCiAgICAgICBpZD0icGF0aDc0IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1NzZlNzM7c3Ryb2tlLXdpZHRoOjAuNzk3MDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNDc2LjA4MjAzLDE0Ni4xMDE1NiBWIDc0Ljk4ODI4MSIKICAgICAgIGlkPSJwYXRoNzYiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzU3NmU3MztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgIGQ9Im0gNDc2LjA4MjAzLDcyLjM5ODQzOCAtMi4wNzQyMiw0LjE0NDUzMSAyLjA3NDIyLC0xLjU1NDY4OCAyLjA3MDMxLDEuNTU0Njg4IgogICAgICAgaWQ9InBhdGg3OCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNTc2ZTczO3N0cm9rZS13aWR0aDowLjc5NzAxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDQzOS4yMzA0NywxMDkuMjUgaCA3MS4xMDkzNyIKICAgICAgIGlkPSJwYXRoODAiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzU3NmU3MztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgIGQ9Im0gNTEyLjkzMzU5LDEwOS4yNSAtNC4xNDQ1MywtMi4wNzQyMiAxLjU1MDc4LDIuMDc0MjIgLTEuNTUwNzgsMi4wNzAzMSIKICAgICAgIGlkPSJwYXRoODIiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzIzOGFkMTtzdHJva2Utd2lkdGg6MC43OTcwMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAxMDcuNTc0MjIsMTA5LjI1IGMgMCwwIDAuMTEzMjgsMCAwLjI0NjA5LDAgMC4xMzI4MiwtMC4wMDQgMC40NTMxMywtMC4wMDQgMC43MTQ4NSwtMC4wMDggMC4yNTc4MSwtMC4wMDggMC43ODEyNSwtMC4wMTU2IDEuMTU2MjUsLTAuMDM1MiAwLjM3NSwtMC4wMTU2IDEuMDc0MjIsLTAuMDUwOCAxLjU1MDc4LC0wLjA4NTkgMC40NzY1NiwtMC4wMzUyIDEuMzMyMDMsLTAuMTA5MzcgMS44OTA2MiwtMC4xNzU3OCAwLjU1ODYsLTAuMDY2NCAxLjUxOTUzLC0wLjE5NTMxIDIuMTM2NzIsLTAuMzA0NjggMC42MTcxOSwtMC4xMDkzOCAxLjY2MDE2LC0wLjMxNjQxIDIuMzEyNSwtMC40NzY1NyAwLjY1MjM1LC0wLjE2MDE1IDEuNzI2NTYsLTAuNDYwOTMgMi4zOTA2MywtMC42ODc1IDAuNjY3OTcsLTAuMjIyNjUgMS43NDYwOSwtMC42MzI4MSAyLjQwMjM0LC0wLjkyNTc4IDAuNjUyMzQsLTAuMjk2ODcgMS42OTUzMSwtMC44MjQyMiAyLjMxNjQxLC0xLjE5NTMxIDAuNjI1LC0wLjM2NzE5IDEuNTk3NjUsLTEuMDE5NTMgMi4xNzE4NywtMS40NjQ4NCAwLjU3NDIyLC0wLjQ0MTQxIDEuNDU3MDMsLTEuMjE0ODUgMS45Njg3NSwtMS43MjY1NyAwLjUxMTcyLC0wLjUxNTYyIDEuMjg5MDYsLTEuMzk0NTMgMS43MzA0NywtMS45Njg3NSAwLjQ0NTMxLC0wLjU3NDIxNiAxLjA5NzY2LC0xLjU1MDc3OSAxLjQ2NDg0LC0yLjE3MTg3MiAwLjM2NzE5LC0wLjYyNSAwLjg5ODQ0LC0xLjY2NDA2MyAxLjE5MTQxLC0yLjMyMDMxMyAwLjI5Mjk3LC0wLjY1NjI1IDAuNzAzMTMsLTEuNzM0Mzc1IDAuOTI5NjksLTIuMzk4NDM3IDAuMjIyNjUsLTAuNjY0MDYzIDAuNTIzNDQsLTEuNzQyMTg4IDAuNjg3NSwtMi4zOTQ1MzIgMC4xNjAxNSwtMC42NTIzNDMgMC4zNjcxOSwtMS42OTE0MDYgMC40NzY1NiwtMi4zMDg1OTMgMC4xMDkzOCwtMC42MTcxODggMC4yMzgyOCwtMS41ODIwMzIgMC4zMDQ2OSwtMi4xNDA2MjUgMC4wNjY0LC0wLjU1ODU5NCAwLjEzNjcyLC0xLjQxMDE1NyAwLjE3NTc4LC0xLjg4NjcxOSAwLjAzNTIsLTAuNDgwNDY5IDAuMDcwMywtMS4xNzU3ODEgMC4wODU5LC0xLjU1MDc4MSAwLjAxNTYsLTAuMzc4OTA3IDAuMDI3MywtMC44OTg0MzggMC4wMzEyLC0xLjE2MDE1NyAwLjAwOCwtMC4yNTc4MTIgMC4wMDgsLTAuNTgyMDMxIDAuMDA4LC0wLjcxNDg0MyAwLC0wLjEzMjgxMyAwLC0wLjI0NjA5NCAwLC0wLjI0NjA5NCIKICAgICAgIGlkPSJwYXRoODQiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzIzOGFkMTtzdHJva2Utd2lkdGg6MC43OTcwMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAxMDcuNTc0MjIsMTA5LjI1IGMgMCwwIDAuMTEzMjgsMCAwLjI0NjA5LDAgMC4xMzI4MiwwIDAuNDUzMTMsMCAwLjcxNDg1LDAuMDA4IDAuMjU3ODEsMC4wMDQgMC43ODEyNSwwLjAxNTYgMS4xNTYyNSwwLjAzMTIgMC4zNzUsMC4wMTU2IDEuMDc0MjIsMC4wNTA4IDEuNTUwNzgsMC4wODU5IDAuNDc2NTYsMC4wMzkxIDEuMzMyMDMsMC4xMDkzOCAxLjg5MDYyLDAuMTc1NzggMC41NTg2LDAuMDY2NCAxLjUxOTUzLDAuMTk5MjIgMi4xMzY3MiwwLjMwNDY5IDAuNjE3MTksMC4xMDkzNyAxLjY2MDE2LDAuMzE2NDEgMi4zMTI1LDAuNDc2NTYgMC42NTIzNSwwLjE2NDA2IDEuNzI2NTYsMC40NjQ4NSAyLjM5MDYzLDAuNjg3NSAwLjY2Nzk3LDAuMjI2NTYgMS43NDYwOSwwLjYzNjcyIDIuNDAyMzQsMC45Mjk2OSAwLjY1MjM0LDAuMjkyOTcgMS42OTUzMSwwLjgyNDIyIDIuMzE2NDEsMS4xOTE0MSAwLjYyNSwwLjM2NzE4IDEuNTk3NjUsMS4wMjM0MyAyLjE3MTg3LDEuNDY0ODQgMC41NzQyMiwwLjQ0MTQxIDEuNDU3MDMsMS4yMTg3NSAxLjk2ODc1LDEuNzMwNDcgMC41MTE3MiwwLjUxMTcyIDEuMjg5MDYsMS4zOTQ1MyAxLjczMDQ3LDEuOTY4NzUgMC40NDUzMSwwLjU3NDIyIDEuMDk3NjYsMS41NDY4NyAxLjQ2NDg0LDIuMTcxODcgMC4zNjcxOSwwLjYyMTEgMC44OTg0NCwxLjY2NDA3IDEuMTkxNDEsMi4zMTY0MSAwLjI5Mjk3LDAuNjU2MjUgMC43MDMxMywxLjczNDM3IDAuOTI5NjksMi40MDIzNCAwLjIyMjY1LDAuNjY0MDcgMC41MjM0NCwxLjczODI4IDAuNjg3NSwyLjM5MDYzIDAuMTYwMTUsMC42NTIzNCAwLjM2NzE5LDEuNjk1MzEgMC40NzY1NiwyLjMxMjUgMC4xMDkzOCwwLjYxNzE4IDAuMjM4MjgsMS41NzgxMiAwLjMwNDY5LDIuMTM2NzIgMC4wNjY0LDAuNTU4NTkgMC4xMzY3MiwxLjQxNDA2IDAuMTc1NzgsMS44OTA2MiAwLjAzNTIsMC40NzY1NiAwLjA3MDMsMS4xNzU3OCAwLjA4NTksMS41NTA3OCAwLjAxNTYsMC4zNzUgMC4wMjczLDAuODk4NDQgMC4wMzEyLDEuMTU2MjUgMC4wMDgsMC4yNjE3MiAwLjAwOCwwLjU4MjAzIDAuMDA4LDAuNzE0ODUgMCwwLjEzMjgxIDAsMC4yNSAwLDAuMjUiCiAgICAgICBpZD0icGF0aDg2IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMyMzhhZDE7c3Ryb2tlLXdpZHRoOjAuNzk3MDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMTY0LjI2NTYzLDEwOS4yNSBjIDAsMCAtMC4xMTMyOSwwIC0wLjI0NjEsMCAtMC4xMzI4MSwwIC0wLjQ1NzAzLDAgLTAuNzE0ODQsMC4wMDggLTAuMjYxNzIsMC4wMDQgLTAuNzgxMjUsMC4wMTU2IC0xLjE2MDE2LDAuMDMxMiAtMC4zNzUsMC4wMTU2IC0xLjA3MDMxLDAuMDUwOCAtMS41NTA3OCwwLjA4NTkgLTAuNDc2NTYsMC4wMzkxIC0xLjMyODEyLDAuMTA5MzggLTEuODg2NzIsMC4xNzU3OCAtMC41NTg1OSwwLjA2NjQgLTEuNTIzNDQsMC4xOTkyMiAtMi4xNDA2MiwwLjMwNDY5IC0wLjYxNzE5LDAuMTA5MzcgLTEuNjU2MjUsMC4zMTY0MSAtMi4zMDg2LDAuNDc2NTYgLTAuNjUyMzQsMC4xNjQwNiAtMS43MzA0NywwLjQ2NDg1IC0yLjM5NDUzLDAuNjg3NSAtMC42NjQwNiwwLjIyNjU2IC0xLjc0MjE5LDAuNjM2NzIgLTIuMzk4NDQsMC45Mjk2OSAtMC42NTYyNSwwLjI5Mjk3IC0xLjY5NTMxLDAuODI0MjIgLTIuMzE2NCwxLjE5MTQxIC0wLjYyNSwwLjM2NzE4IC0xLjU5NzY2LDEuMDIzNDMgLTIuMTc1NzgsMS40NjQ4NCAtMC41NzQyMiwwLjQ0MTQxIC0xLjQ1MzEzLDEuMjE4NzUgLTEuOTY0ODUsMS43MzA0NyAtMC41MTU2MiwwLjUxMTcyIC0xLjI4OTA2LDEuMzk0NTMgLTEuNzMwNDcsMS45Njg3NSAtMC40NDUzMSwwLjU3NDIyIC0xLjA5NzY1LDEuNTQ2ODcgLTEuNDY0ODQsMi4xNzE4NyAtMC4zNzEwOSwwLjYyMTEgLTAuODk4NDQsMS42NjQwNyAtMS4xOTUzMSwyLjMxNjQxIC0wLjI5Mjk3LDAuNjU2MjUgLTAuNzAzMTMsMS43MzQzNyAtMC45MjU3OCwyLjQwMjM0IC0wLjIyNjU3LDAuNjY0MDcgLTAuNTI3MzUsMS43MzgyOCAtMC42ODc1LDIuMzkwNjMgLTAuMTYwMTYsMC42NTIzNCAtMC4zNjcxOSwxLjY5NTMxIC0wLjQ3NjU3LDIuMzEyNSAtMC4xMDkzNywwLjYxNzE4IC0wLjIzODI4LDEuNTc4MTIgLTAuMzA0NjgsMi4xMzY3MiAtMC4wNjY0LDAuNTU4NTkgLTAuMTQwNjMsMS40MTQwNiAtMC4xNzU3OCwxLjg5MDYyIC0wLjAzNTIsMC40NzY1NiAtMC4wNzAzLDEuMTc1NzggLTAuMDg1OSwxLjU1MDc4IC0wLjAxOTUsMC4zNzUgLTAuMDI3MywwLjg5ODQ0IC0wLjAzNTIsMS4xNTYyNSAtMC4wMDQsMC4yNjE3MiAtMC4wMDQsMC41ODIwMyAtMC4wMDgsMC43MTQ4NSAwLDAuMTMyODEgMCwwLjI1IDAsMC4yNSIKICAgICAgIGlkPSJwYXRoODgiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzIzOGFkMTtzdHJva2Utd2lkdGg6MC43OTcwMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAxNjQuMjY1NjMsMTA5LjI1IGMgMCwwIC0wLjExMzI5LDAgLTAuMjQ2MSwwIC0wLjEzMjgxLC0wLjAwNCAtMC40NTcwMywtMC4wMDQgLTAuNzE0ODQsLTAuMDA4IC0wLjI2MTcyLC0wLjAwOCAtMC43ODEyNSwtMC4wMTU2IC0xLjE2MDE2LC0wLjAzNTIgLTAuMzc1LC0wLjAxNTYgLTEuMDcwMzEsLTAuMDUwOCAtMS41NTA3OCwtMC4wODU5IC0wLjQ3NjU2LC0wLjAzNTIgLTEuMzI4MTIsLTAuMTA5MzcgLTEuODg2NzIsLTAuMTc1NzggLTAuNTU4NTksLTAuMDY2NCAtMS41MjM0NCwtMC4xOTUzMSAtMi4xNDA2MiwtMC4zMDQ2OCAtMC42MTcxOSwtMC4xMDkzOCAtMS42NTYyNSwtMC4zMTY0MSAtMi4zMDg2LC0wLjQ3NjU3IC0wLjY1MjM0LC0wLjE2MDE1IC0xLjczMDQ3LC0wLjQ2MDkzIC0yLjM5NDUzLC0wLjY4NzUgLTAuNjY0MDYsLTAuMjIyNjUgLTEuNzQyMTksLTAuNjMyODEgLTIuMzk4NDQsLTAuOTI1NzggLTAuNjU2MjUsLTAuMjk2ODcgLTEuNjk1MzEsLTAuODI0MjIgLTIuMzE2NCwtMS4xOTUzMSAtMC42MjUsLTAuMzY3MTkgLTEuNTk3NjYsLTEuMDE5NTMgLTIuMTc1NzgsLTEuNDY0ODQgLTAuNTc0MjIsLTAuNDQxNDEgLTEuNDUzMTMsLTEuMjE0ODUgLTEuOTY0ODUsLTEuNzI2NTcgLTAuNTE1NjIsLTAuNTE1NjIgLTEuMjg5MDYsLTEuMzk0NTMgLTEuNzMwNDcsLTEuOTY4NzUgLTAuNDQ1MzEsLTAuNTc0MjE2IC0xLjA5NzY1LC0xLjU1MDc3OSAtMS40NjQ4NCwtMi4xNzE4NzIgLTAuMzcxMDksLTAuNjI1IC0wLjg5ODQ0LC0xLjY2NDA2MyAtMS4xOTUzMSwtMi4zMjAzMTMgLTAuMjkyOTcsLTAuNjU2MjUgLTAuNzAzMTMsLTEuNzM0Mzc1IC0wLjkyNTc4LC0yLjM5ODQzNyAtMC4yMjY1NywtMC42NjQwNjMgLTAuNTI3MzUsLTEuNzQyMTg4IC0wLjY4NzUsLTIuMzk0NTMyIC0wLjE2MDE2LC0wLjY1MjM0MyAtMC4zNjcxOSwtMS42OTE0MDYgLTAuNDc2NTcsLTIuMzA4NTkzIC0wLjEwOTM3LC0wLjYxNzE4OCAtMC4yMzgyOCwtMS41ODIwMzIgLTAuMzA0NjgsLTIuMTQwNjI1IC0wLjA2NjQsLTAuNTU4NTk0IC0wLjE0MDYzLC0xLjQxMDE1NyAtMC4xNzU3OCwtMS44ODY3MTkgLTAuMDM1MiwtMC40ODA0NjkgLTAuMDcwMywtMS4xNzU3ODEgLTAuMDg1OSwtMS41NTA3ODEgLTAuMDE5NSwtMC4zNzg5MDcgLTAuMDI3MywtMC44OTg0MzggLTAuMDM1MiwtMS4xNjAxNTcgLTAuMDA0LC0wLjI1NzgxMiAtMC4wMDQsLTAuNTgyMDMxIC0wLjAwOCwtMC43MTQ4NDMgMCwtMC4xMzI4MTMgMCwtMC4yNDYwOTQgMCwtMC4yNDYwOTQiCiAgICAgICBpZD0icGF0aDkwIiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2dseXBoMC0xIgogICAgICAgeD0iMTI4LjMyOCIKICAgICAgIHk9IjE1Ny40NjIwMSIKICAgICAgIGlkPSJ1c2U5MiIKICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgaGVpZ2h0PSIxMDAlIgogICAgICAgc3R5bGU9ImZpbGw6I2QxMzU3ZjtmaWxsLW9wYWNpdHk6MSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNnbHlwaDEtMSIKICAgICAgIHg9IjEzMi43MDMiCiAgICAgICB5PSIxNTkuMDM3IgogICAgICAgaWQ9InVzZTk2IgogICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICBoZWlnaHQ9IjEwMCUiCiAgICAgICBzdHlsZT0iZmlsbDojZDEzNTdmO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2dseXBoMi0xIgogICAgICAgeD0iMTM2LjY3NCIKICAgICAgIHk9IjE1OS4wMzciCiAgICAgICBpZD0idXNlMTAwIgogICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICBoZWlnaHQ9IjEwMCUiCiAgICAgICBzdHlsZT0iZmlsbDojZDEzNTdmO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2dseXBoMS0yIgogICAgICAgeD0iMTM5LjAzOTk5IgogICAgICAgeT0iMTU5LjAzNyIKICAgICAgIGlkPSJ1c2UxMDQiCiAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgIGhlaWdodD0iMTAwJSIKICAgICAgIHN0eWxlPSJmaWxsOiNkMTM1N2Y7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzIzOGFkMTtzdHJva2Utd2lkdGg6MC43OTcwMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAxOTIuNjEzMjgsMTA5LjI1IDIyMC45NjA5NCw4MC45MDIzNDQgMjQ5LjMwNDY5LDEwOS4yNSAyMjAuOTYwOTQsMTM3LjU5NzY2IDE5Mi42MTMyOCwxMDkuMjUiCiAgICAgICBpZD0icGF0aDEwOCIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNnbHlwaDAtMSIKICAgICAgIHg9IjIxNi41MzciCiAgICAgICB5PSIxNTcuNDYyMDEiCiAgICAgICBpZD0idXNlMTEwIgogICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICBoZWlnaHQ9IjEwMCUiCiAgICAgICBzdHlsZT0iZmlsbDojZDEzNTdmO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2dseXBoMS0zIgogICAgICAgeD0iMjIwLjkxMiIKICAgICAgIHk9IjE1OS4wMzciCiAgICAgICBpZD0idXNlMTE0IgogICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICBoZWlnaHQ9IjEwMCUiCiAgICAgICBzdHlsZT0iZmlsbDojZDEzNTdmO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMyMzhhZDE7c3Ryb2tlLXdpZHRoOjAuNzk3MDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMzM0LjM0NzY2LDEwOS4yNSBjIDAsLTE1LjY1NjI1IC0xMi42OTE0MSwtMjguMzQ3NjU2IC0yOC4zNDc2NiwtMjguMzQ3NjU2IC0xNS42NTYyNSwwIC0yOC4zNDc2NiwxMi42OTE0MDYgLTI4LjM0NzY2LDI4LjM0NzY1NiAwLDE1LjY1NjI1IDEyLjY5MTQxLDI4LjM0NzY2IDI4LjM0NzY2LDI4LjM0NzY2IDE1LjY1NjI1LDAgMjguMzQ3NjYsLTEyLjY5MTQxIDI4LjM0NzY2LC0yOC4zNDc2NiB6IG0gMCwwIgogICAgICAgaWQ9InBhdGgxMTgiIC8+CiAgICA8dXNlCiAgICAgICB4bGluazpocmVmPSIjZ2x5cGgwLTEiCiAgICAgICB4PSIzMDEuNTc4IgogICAgICAgeT0iMTU3LjQ2MjAxIgogICAgICAgaWQ9InVzZTEyMCIKICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgaGVpZ2h0PSIxMDAlIgogICAgICAgc3R5bGU9ImZpbGw6I2QxMzU3ZjtmaWxsLW9wYWNpdHk6MSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNnbHlwaDEtNCIKICAgICAgIHg9IjMwNS45NTMiCiAgICAgICB5PSIxNTkuMDM3IgogICAgICAgaWQ9InVzZTEyNCIKICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgaGVpZ2h0PSIxMDAlIgogICAgICAgc3R5bGU9ImZpbGw6I2QxMzU3ZjtmaWxsLW9wYWNpdHk6MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMjM4YWQxO3N0cm9rZS13aWR0aDowLjc5NzAxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDM2Mi42OTUzMSwxMDkuMjUgYyAwLDAgMC4wMDgsLTUuODk0NTMgMC4wMjczLC03LjMzMjAzIDAuMDE1NiwtMS40MzM1OSAwLjA1NDcsLTIuMzAwNzgyIDAuMDg5OCwtMy4wMjM0MzkgMC4wMzEyLC0wLjcyMjY1NiAwLjEwMTU2LC0xLjYxMzI4MSAwLjE1MjM1LC0yLjE3NTc4MSAwLjA1MDgsLTAuNTY2NDA2IDAuMTQ0NTMsLTEuNDAyMzQ0IDAuMjEwOTMsLTEuODk0NTMxIDAuMDcwMywtMC40ODgyODEgMC4xOTE0MSwtMS4yMTQ4NDQgMC4yNzczNSwtMS42NDg0MzggMC4wODU5LC0wLjQzMzU5MyAwLjIzNDM3LC0xLjA4MjAzMSAwLjMzNTkzLC0xLjQ2NDg0MyAwLjEwNTQ3LC0wLjM4NjcxOSAwLjI4MTI1LC0wLjk2ODc1IDAuNDAyMzUsLTEuMzE2NDA3IDAuMTIxMDksLTAuMzQ3NjU2IDAuMzI4MTIsLTAuODc4OTA2IDAuNDY0ODQsLTEuMTk1MzEyIDAuMTQwNjMsLTAuMzE2NDA2IDAuMzc1LC0wLjc5Mjk2OSAwLjUzMTI1LC0xLjA4MjAzMSAwLjE1NjI1LC0wLjI4OTA2MyAwLjQyNTc4LC0wLjcyNjU2MyAwLjYwMTU2LC0wLjk4ODI4MiAwLjE3NTc5LC0wLjI2MTcxOCAwLjQ3MjY2LC0wLjY2NDA2MiAwLjY2Nzk3LC0wLjkwMjM0MyAwLjE5NTMyLC0wLjIzODI4MiAwLjUyMzQ0LC0wLjYwNTQ2OSAwLjc0MjE5LC0wLjgyMDMxMyAwLjIxNDg0LC0wLjIxNDg0NCAwLjU3ODEzLC0wLjU0Mjk2OSAwLjgxNjQxLC0wLjczODI4MSAwLjI0MjE4LC0wLjE5NTMxMyAwLjY0MDYyLC0wLjQ5NjA5NCAwLjkwMjM0LC0wLjY3MTg3NSAwLjI2MTcyLC0wLjE3NTc4MSAwLjcwMzEzLC0wLjQ0MTQwNiAwLjk5MjE5LC0wLjYwMTU2MyAwLjI4NTE1LC0wLjE1NjI1IDAuNzY1NjIsLTAuMzkwNjI1IDEuMDgyMDMsLTAuNTI3MzQzIDAuMzE2NDEsLTAuMTQwNjI1IDAuODQzNzUsLTAuMzQ3NjU3IDEuMTkxNDEsLTAuNDY0ODQ0IDAuMzUxNTYsLTAuMTIxMDk0IDAuOTI5NjgsLTAuMzAwNzgxIDEuMzE2NCwtMC40MDIzNDQgMC4zODY3MiwtMC4xMDU0NjkgMS4wMzUxNiwtMC4yNTM5MDYgMS40Njg3NSwtMC4zMzk4NDQgMC40Mjk2OSwtMC4wODU5NCAxLjE1NjI1LC0wLjIwNzAzMSAxLjY0ODQ0LC0wLjI3MzQzNyAwLjQ5MjE5LC0wLjA2NjQxIDEuMzI4MTIsLTAuMTY0MDYzIDEuODkwNjIsLTAuMjE0ODQ0IDAuNTY2NDEsLTAuMDUwNzggMS40NTcwNCwtMC4xMTcxODcgMi4xNzk2OSwtMC4xNTIzNDQgMC43MTg3NSwtMC4wMzEyNSAxLjU4NTk0LC0wLjA3NDIyIDMuMDIzNDQsLTAuMDg5ODQgMS40Mzc1LC0wLjAxNTYzIDcuMzI4MTIsLTAuMDI3MzQgNy4zMjgxMiwtMC4wMjczNCIKICAgICAgIGlkPSJwYXRoMTI4IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMyMzhhZDE7c3Ryb2tlLXdpZHRoOjAuNzk3MDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMzYyLjY5NTMxLDEwOS4yNSBjIDAsMCAwLjAwOCw1Ljg5MDYzIDAuMDI3Myw3LjMyODEzIDAuMDE1NiwxLjQzNzUgMC4wNTQ3LDIuMzA0NjggMC4wODk4LDMuMDI3MzQgMC4wMzEyLDAuNzE4NzUgMC4xMDE1NiwxLjYwOTM3IDAuMTUyMzUsMi4xNzU3OCAwLjA1MDgsMC41NjI1IDAuMTQ0NTMsMS4zOTg0NCAwLjIxMDkzLDEuODkwNjMgMC4wNzAzLDAuNDkyMTggMC4xOTE0MSwxLjIxODc1IDAuMjc3MzUsMS42NTIzNCAwLjA4NTksMC40Mjk2OSAwLjIzNDM3LDEuMDc4MTIgMC4zMzU5MywxLjQ2NDg0IDAuMTA1NDcsMC4zODY3MiAwLjI4MTI1LDAuOTY4NzUgMC40MDIzNSwxLjMxNjQxIDAuMTIxMDksMC4zNDc2NSAwLjMyODEyLDAuODc1IDAuNDY0ODQsMS4xOTE0IDAuMTQwNjMsMC4zMTY0MSAwLjM3NSwwLjc5Njg4IDAuNTMxMjUsMS4wODIwNCAwLjE1NjI1LDAuMjg5MDYgMC40MjU3OCwwLjczMDQ2IDAuNjAxNTYsMC45OTIxOCAwLjE3NTc5LDAuMjYxNzIgMC40NzI2NiwwLjY2NDA3IDAuNjY3OTcsMC45MDIzNSAwLjE5NTMyLDAuMjM4MjggMC41MjM0NCwwLjYwMTU2IDAuNzQyMTksMC44MTY0IDAuMjE0ODQsMC4yMTg3NSAwLjU3ODEzLDAuNTQ2ODggMC44MTY0MSwwLjc0MjE5IDAuMjQyMTgsMC4xOTUzMSAwLjY0MDYyLDAuNDkyMTkgMC45MDIzNCwwLjY2Nzk3IDAuMjYxNzIsMC4xNzU3OCAwLjcwMzEzLDAuNDQ1MzEgMC45OTIxOSwwLjYwMTU2IDAuMjg1MTUsMC4xNTYyNSAwLjc2NTYyLDAuMzkwNjMgMS4wODIwMywwLjUzMTI1IDAuMzE2NDEsMC4xMzY3MiAwLjg0Mzc1LDAuMzQzNzUgMS4xOTE0MSwwLjQ2NDg1IDAuMzUxNTYsMC4xMjEwOSAwLjkyOTY4LDAuMzAwNzggMS4zMTY0LDAuNDAyMzQgMC4zODY3MiwwLjEwMTU2IDEuMDM1MTYsMC4yNTM5MSAxLjQ2ODc1LDAuMzM1OTQgMC40Mjk2OSwwLjA4NTkgMS4xNTYyNSwwLjIwNzAzIDEuNjQ4NDQsMC4yNzczNCAwLjQ5MjE5LDAuMDY2NCAxLjMyODEyLDAuMTYwMTYgMS44OTA2MiwwLjIxMDk0IDAuNTY2NDEsMC4wNTA4IDEuNDU3MDQsMC4xMjEwOSAyLjE3OTY5LDAuMTUyMzQgMC43MTg3NSwwLjAzNTIgMS41ODU5NCwwLjA3NDIgMy4wMjM0NCwwLjA5MzcgMS40Mzc1LDAuMDE1NiA3LjMyODEyLDAuMDI3MyA3LjMyODEyLDAuMDI3MyIKICAgICAgIGlkPSJwYXRoMTMwIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMyMzhhZDE7c3Ryb2tlLXdpZHRoOjAuNzk3MDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gNDE5LjM4NjcyLDEwOS4yNSBjIDAsMCAtMC4wMTE3LDUuODkwNjMgLTAuMDI3Myw3LjMyODEzIC0wLjAxNTYsMS40Mzc1IC0wLjA1NDcsMi4zMDQ2OCAtMC4wODk4LDMuMDI3MzQgLTAuMDM1MiwwLjcxODc1IC0wLjEwMTU2LDEuNjA5MzcgLTAuMTUyMzQsMi4xNzU3OCAtMC4wNTA4LDAuNTYyNSAtMC4xNDQ1MywxLjM5ODQ0IC0wLjIxNDg1LDEuODkwNjMgLTAuMDY2NCwwLjQ5MjE4IC0wLjE4NzUsMS4yMTg3NSAtMC4yNzM0MywxLjY1MjM0IC0wLjA4NTksMC40Mjk2OSAtMC4yMzQzOCwxLjA3ODEyIC0wLjMzOTg1LDEuNDY0ODQgLTAuMTAxNTYsMC4zODY3MiAtMC4yODEyNSwwLjk2ODc1IC0wLjQwMjM0LDEuMzE2NDEgLTAuMTE3MTksMC4zNDc2NSAtMC4zMjQyMiwwLjg3NSAtMC40NjQ4NCwxLjE5MTQgLTAuMTM2NzIsMC4zMTY0MSAtMC4zNzExLDAuNzk2ODggLTAuNTI3MzUsMS4wODIwNCAtMC4xNjAxNSwwLjI4OTA2IC0wLjQyNTc4LDAuNzMwNDYgLTAuNjAxNTYsMC45OTIxOCAtMC4xNzU3OCwwLjI2MTcyIC0wLjQ3MjY2LDAuNjY0MDcgLTAuNjcxODgsMC45MDIzNSAtMC4xOTUzMSwwLjIzODI4IC0wLjUyMzQzLDAuNjAxNTYgLTAuNzM4MjgsMC44MTY0IC0wLjIxNDg0LDAuMjE4NzUgLTAuNTgyMDMsMC41NDY4OCAtMC44MjAzMSwwLjc0MjE5IC0wLjIzODI4LDAuMTk1MzEgLTAuNjM2NzIsMC40OTIxOSAtMC45MDIzNCwwLjY2Nzk3IC0wLjI2MTcyLDAuMTc1NzggLTAuNjk5MjIsMC40NDUzMSAtMC45ODgyOCwwLjYwMTU2IC0wLjI4OTA3LDAuMTU2MjUgLTAuNzY1NjMsMC4zOTA2MyAtMS4wODIwNCwwLjUzMTI1IC0wLjMxNjQsMC4xMzY3MiAtMC44NDc2NSwwLjM0Mzc1IC0xLjE5NTMxLDAuNDY0ODUgLTAuMzQ3NjUsMC4xMjEwOSAtMC45Mjk2OSwwLjMwMDc4IC0xLjMxNjQsMC40MDIzNCAtMC4zODI4MiwwLjEwMTU2IC0xLjAzMTI1LDAuMjUzOTEgLTEuNDY0ODUsMC4zMzU5NCAtMC40MzM1OSwwLjA4NTkgLTEuMTU2MjUsMC4yMDcwMyAtMS42NDg0NCwwLjI3NzM0IC0wLjQ5MjE4LDAuMDY2NCAtMS4zMjgxMiwwLjE2MDE2IC0xLjg5MDYyLDAuMjEwOTQgLTAuNTY2NDEsMC4wNTA4IC0xLjQ1NzAzLDAuMTIxMDkgLTIuMTc5NjksMC4xNTIzNCAtMC43MjI2NiwwLjAzNTIgLTEuNTg5ODQsMC4wNzQyIC0zLjAyMzQ0LDAuMDkzNyAtMS40Mzc1LDAuMDE1NiAtNy4zMzIwMywwLjAyNzMgLTcuMzMyMDMsMC4wMjczIgogICAgICAgaWQ9InBhdGgxMzIiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzIzOGFkMTtzdHJva2Utd2lkdGg6MC43OTcwMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSA0MTkuMzg2NzIsMTA5LjI1IGMgMCwwIC0wLjAxMTcsLTUuODk0NTMgLTAuMDI3MywtNy4zMzIwMyAtMC4wMTU2LC0xLjQzMzU5IC0wLjA1NDcsLTIuMzAwNzgyIC0wLjA4OTgsLTMuMDIzNDM5IC0wLjAzNTIsLTAuNzIyNjU2IC0wLjEwMTU2LC0xLjYxMzI4MSAtMC4xNTIzNCwtMi4xNzU3ODEgLTAuMDUwOCwtMC41NjY0MDYgLTAuMTQ0NTMsLTEuNDAyMzQ0IC0wLjIxNDg1LC0xLjg5NDUzMSAtMC4wNjY0LC0wLjQ4ODI4MSAtMC4xODc1LC0xLjIxNDg0NCAtMC4yNzM0MywtMS42NDg0MzggLTAuMDg1OSwtMC40MzM1OTMgLTAuMjM0MzgsLTEuMDgyMDMxIC0wLjMzOTg1LC0xLjQ2NDg0MyAtMC4xMDE1NiwtMC4zODY3MTkgLTAuMjgxMjUsLTAuOTY4NzUgLTAuNDAyMzQsLTEuMzE2NDA3IC0wLjExNzE5LC0wLjM0NzY1NiAtMC4zMjQyMiwtMC44Nzg5MDYgLTAuNDY0ODQsLTEuMTk1MzEyIC0wLjEzNjcyLC0wLjMxNjQwNiAtMC4zNzExLC0wLjc5Mjk2OSAtMC41MjczNSwtMS4wODIwMzEgLTAuMTYwMTUsLTAuMjg5MDYzIC0wLjQyNTc4LC0wLjcyNjU2MyAtMC42MDE1NiwtMC45ODgyODIgLTAuMTc1NzgsLTAuMjYxNzE4IC0wLjQ3MjY2LC0wLjY2NDA2MiAtMC42NzE4OCwtMC45MDIzNDMgLTAuMTk1MzEsLTAuMjM4MjgyIC0wLjUyMzQzLC0wLjYwNTQ2OSAtMC43MzgyOCwtMC44MjAzMTMgLTAuMjE0ODQsLTAuMjE0ODQ0IC0wLjU4MjAzLC0wLjU0Mjk2OSAtMC44MjAzMSwtMC43MzgyODEgLTAuMjM4MjgsLTAuMTk1MzEzIC0wLjYzNjcyLC0wLjQ5NjA5NCAtMC45MDIzNCwtMC42NzE4NzUgLTAuMjYxNzIsLTAuMTc1NzgxIC0wLjY5OTIyLC0wLjQ0MTQwNiAtMC45ODgyOCwtMC42MDE1NjMgLTAuMjg5MDcsLTAuMTU2MjUgLTAuNzY1NjMsLTAuMzkwNjI1IC0xLjA4MjA0LC0wLjUyNzM0MyAtMC4zMTY0LC0wLjE0MDYyNSAtMC44NDc2NSwtMC4zNDc2NTcgLTEuMTk1MzEsLTAuNDY0ODQ0IC0wLjM0NzY1LC0wLjEyMTA5NCAtMC45Mjk2OSwtMC4zMDA3ODEgLTEuMzE2NCwtMC40MDIzNDQgLTAuMzgyODIsLTAuMTA1NDY5IC0xLjAzMTI1LC0wLjI1MzkwNiAtMS40NjQ4NSwtMC4zMzk4NDQgLTAuNDMzNTksLTAuMDg1OTQgLTEuMTU2MjUsLTAuMjA3MDMxIC0xLjY0ODQ0LC0wLjI3MzQzNyAtMC40OTIxOCwtMC4wNjY0MSAtMS4zMjgxMiwtMC4xNjQwNjMgLTEuODkwNjIsLTAuMjE0ODQ0IC0wLjU2NjQxLC0wLjA1MDc4IC0xLjQ1NzAzLC0wLjExNzE4NyAtMi4xNzk2OSwtMC4xNTIzNDQgLTAuNzIyNjYsLTAuMDMxMjUgLTEuNTg5ODQsLTAuMDc0MjIgLTMuMDIzNDQsLTAuMDg5ODQgLTEuNDM3NSwtMC4wMTU2MyAtNy4zMzIwMywtMC4wMjczNCAtNy4zMzIwMywtMC4wMjczNCIKICAgICAgIGlkPSJwYXRoMTM0IiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2dseXBoMC0xIgogICAgICAgeD0iMzg2LjYxODAxIgogICAgICAgeT0iMTU3LjQ2MjAxIgogICAgICAgaWQ9InVzZTEzNiIKICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgaGVpZ2h0PSIxMDAlIgogICAgICAgc3R5bGU9ImZpbGw6I2QxMzU3ZjtmaWxsLW9wYWNpdHk6MSIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNnbHlwaDEtNSIKICAgICAgIHg9IjM5MC45OTMwMSIKICAgICAgIHk9IjE1OS4wMzciCiAgICAgICBpZD0idXNlMTQwIgogICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICBoZWlnaHQ9IjEwMCUiCiAgICAgICBzdHlsZT0iZmlsbDojZDEzNTdmO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMyMzhhZDE7c3Ryb2tlLXdpZHRoOjAuNzk3MDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNDQ3LjczNDM3LDEzNy41OTc2NiBWIDgwLjkwMjM0NCBoIDU2LjY5MTQxIHYgNTYuNjk1MzE2IHogbSAwLDAiCiAgICAgICBpZD0icGF0aDE0NCIgLz4KICAgIDx1c2UKICAgICAgIHhsaW5rOmhyZWY9IiNnbHlwaDAtMSIKICAgICAgIHg9IjQ2OS42NzMiCiAgICAgICB5PSIxNTcuNDYyMDEiCiAgICAgICBpZD0idXNlMTQ2IgogICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICBoZWlnaHQ9IjEwMCUiCiAgICAgICBzdHlsZT0iZmlsbDojZDEzNTdmO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgPHVzZQogICAgICAgeGxpbms6aHJlZj0iI2dseXBoMy0xIgogICAgICAgeD0iNDc0LjA0OCIKICAgICAgIHk9IjE1OS4wMzciCiAgICAgICBpZD0idXNlMTUwIgogICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICBoZWlnaHQ9IjEwMCUiCiAgICAgICBzdHlsZT0iZmlsbDojZDEzNTdmO2ZpbGwtb3BhY2l0eToxIiAvPgogIDwvZz4KPC9zdmc+Cg==" title="二维欧氏空间中的5个范数球" class="center top2 bottom2 width75">
<ul>
<li>将<span class="mathjax-exps">$\ell_p~(0 \le p \le 1)$</span>范数球作为学习模型的可行域，可导出稀疏的解</li>
<li>所有<span class="mathjax-exps">$\ell_p~(p \ge 1)$</span>范数球都是凸集，数学性质好</li>
</ul>
<p><span class="mathjax-exps">$\ell_1$</span>唯一既凸且稀疏，将其范数球作为<span class="mathjax-exps">$\Rbb^2$</span>上最小二乘的可行域</p>
<p>

$$
\begin{align*}
    \min_{w_1, w_2} ~ \left \| \begin{bmatrix}
        -2.0011 &amp; -0.8994 \\
        -1.0311 &amp;  0.3146 \\
         0.6900 &amp;  1.7222 \\
         2.3422 &amp; -1.1373 \\
    \end{bmatrix} \begin{bmatrix}
        w_1 \\
        w_2 \\
    \end{bmatrix} - \begin{bmatrix}
        1 \\
        1 \\
        0 \\
        0 \\
    \end{bmatrix} \right\|^2 \quad \st ~ |w_1| + |w_2| \le t
\end{align*}
$$
</p>

<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="1062" class="slide " data-line="1062" data-h="12" data-v="2">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征选择 稀疏范数</h5></div></div>
<ul>
<li>左图中以原点为中心的同心正方形是<span class="mathjax-exps">$\ell_1$</span>范数球的等高线</li>
<li>右图中以原点为中心的同心圆是<span class="mathjax-exps">$\ell_2$</span>范数球的等高线</li>
<li>两图中左边的一系列同心椭圆是<span class="mathjax-exps">$\| \Xv \wv - \yv \|^2$</span>的等高线</li>
</ul>
<img src="data:image/svg+xml;charset=utf-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgaGVpZ2h0PSI0MDYuNDQzM3B0IgogICB2ZXJzaW9uPSIxLjEiCiAgIHZpZXdCb3g9IjAgMCA5MjMuNDIzNDYgNDA2LjQ0MzMiCiAgIHdpZHRoPSI5MjMuNDIzNDZwdCIKICAgaWQ9InN2ZzYxMyIKICAgc29kaXBvZGk6ZG9jbmFtZT0ic3BhcnNlLXNvbHV0aW9uLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4xLjEgKDNiZjVhZTBkMjUsIDIwMjEtMDktMjApIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJuYW1lZHZpZXc2MTUiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0iMCIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHQiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjEuMjk5MTA3MSIKICAgICBpbmtzY2FwZTpjeD0iNjE2LjE5MjQ0IgogICAgIGlua3NjYXBlOmN5PSIyNjAuMTc4NjkiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIzODQwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjIxMDYiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjU0IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnNjEzIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTIiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrPgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6ZGF0ZT4yMDIxLTEwLTEyVDIwOjA4OjI4LjQ1NDQ1ODwvZGM6ZGF0ZT4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlPk1hdHBsb3RsaWIgdjMuNC4zLCBodHRwczovL21hdHBsb3RsaWIub3JnLzwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6Y3JlYXRvcj4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMKICAgICBpZD0iZGVmczYiPgogICAgPHN0eWxlCiAgICAgICB0eXBlPSJ0ZXh0L2NzcyIKICAgICAgIGlkPSJzdHlsZTQiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fTwvc3R5bGU+CiAgPC9kZWZzPgogIDxnCiAgICAgaWQ9ImcxNDMzIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMTMuNzc2NTYsLTU2Ljg1NzM0NCkiPgogICAgPGcKICAgICAgIGlkPSJheGVzXzEiPgogICAgICA8ZwogICAgICAgICBpZD0icGF0Y2hfMiI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJNIDE0NCw0NDguNTYgSCA1NDkuODE4MTggViA2MC40OCBIIDE0NCBaIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNlZWU4ZDUiCiAgICAgICAgICAgaWQ9InBhdGgxMSIgLz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICBpZD0ibWF0cGxvdGxpYi5heGlzXzEiPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9Inh0aWNrXzEiPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfMSI+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwODMxOGQ5ZTFjZikiCiAgICAgICAgICAgICAgIGQ9Ik0gMTc3LjgxODE4LDQ0OC41NiBWIDYwLjQ4IgogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmRmNmUzIgogICAgICAgICAgICAgICBpZD0icGF0aDE0IiAvPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfMiI+CiAgICAgICAgICAgIDxkZWZzCiAgICAgICAgICAgICAgIGlkPSJkZWZzMTgiPgogICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgZD0iTSAwLDAgViAzLjUiCiAgICAgICAgICAgICAgICAgaWQ9Im0zZmI0NzcwMzI1IgogICAgICAgICAgICAgICAgIHN0eWxlPSJzdHJva2U6IzY1N2I4MztzdHJva2Utd2lkdGg6MC44IiAvPgogICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIGlkPSJnMjIiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzO3N0cm9rZTojNjU3YjgzO3N0cm9rZS13aWR0aDowLjgiCiAgICAgICAgICAgICAgICAgeD0iMTc3LjgxODE4IgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNtM2ZiNDc3MDMyNSIKICAgICAgICAgICAgICAgICB5PSI0NDguNTYiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJ0ZXh0XzEiPgogICAgICAgICAgICA8IS0tIOKIkjAuNCAtLT4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MyIKICAgICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4xLDAsMCwtMC4xLDE2NS42NzY3OCw0NjMuMTU4NDQpIgogICAgICAgICAgICAgICBpZD0iZzM5Ij4KICAgICAgICAgICAgICA8ZGVmcwogICAgICAgICAgICAgICAgIGlkPSJkZWZzMjkiPgogICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgIGQ9Ik0gNjc4LDIyNzIgSCA0Njg0IFYgMTc0MSBIIDY3OCBaIgogICAgICAgICAgICAgICAgICAgaWQ9IkRlamFWdVNhbnMtMjIxMiIKICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC4wMTU2MjUpIiAvPgogICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgIGQ9Im0gMjAzNCw0MjUwIHEgLTQ4NywwIC03MzMsLTQ4MCAtMjQ1LC00NzkgLTI0NSwtMTQ0MiAwLC05NTkgMjQ1LC0xNDM5IDI0NiwtNDgwIDczMywtNDgwIDQ5MSwwIDczNiw0ODAgMjQ2LDQ4MCAyNDYsMTQzOSAwLDk2MyAtMjQ2LDE0NDIgLTI0NSw0ODAgLTczNiw0ODAgeiBtIDAsNTAwIHEgNzg1LDAgMTE5OSwtNjIxIDQxNCwtNjIwIDQxNCwtMTgwMSAwLC0xMTc4IC00MTQsLTE3OTkgLTQxNCwtNjIwIC0xMTk5LC02MjAgLTc4NCwwIC0xMTk4LDYyMCAtNDE0LDYyMSAtNDE0LDE3OTkgMCwxMTgxIDQxNCwxODAxIDQxNCw2MjEgMTE5OCw2MjEgeiIKICAgICAgICAgICAgICAgICAgIGlkPSJEZWphVnVTYW5zLTMwIgogICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjAxNTYyNSkiIC8+CiAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgZD0ibSA2ODQsNzk0IGggNjYwIFYgMCBIIDY4NCBaIgogICAgICAgICAgICAgICAgICAgaWQ9IkRlamFWdVNhbnMtMmUiCiAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMDE1NjI1KSIgLz4KICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICBkPSJNIDI0MTksNDExNiA4MjUsMTYyNSBoIDE1OTQgeiBtIC0xNjYsNTUwIGggNzk0IFYgMTYyNSBoIDY2NiBWIDExMDAgSCAzMDQ3IFYgMCBIIDI0MTkgViAxMTAwIEggMzEzIHYgNjA5IHoiCiAgICAgICAgICAgICAgICAgICBpZD0iRGVqYVZ1U2Fucy0zNCIKICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC4wMTU2MjUpIiAvPgogICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMjIxMiIKICAgICAgICAgICAgICAgICBpZD0idXNlMzEiCiAgICAgICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iODMuNzg5MDYyIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTMwIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UzMyIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTQ3LjQxMjExIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTJlIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UzNSIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTc5LjE5OTIyIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTM0IgogICAgICAgICAgICAgICAgIGlkPSJ1c2UzNyIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJ4dGlja18yIj4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzMiPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjcDgzMThkOWUxY2YpIgogICAgICAgICAgICAgICBkPSJNIDI0NS40NTQ1NCw0NDguNTYgViA2MC40OCIKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZkZjZlMyIKICAgICAgICAgICAgICAgaWQ9InBhdGg0MyIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzQiPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBpZD0iZzQ4Ij4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MztzdHJva2U6IzY1N2I4MztzdHJva2Utd2lkdGg6MC44IgogICAgICAgICAgICAgICAgIHg9IjI0NS40NTQ1NCIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjbTNmYjQ3NzAzMjUiCiAgICAgICAgICAgICAgICAgeT0iNDQ4LjU2IgogICAgICAgICAgICAgICAgIGlkPSJ1c2U0NiIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0idGV4dF8yIj4KICAgICAgICAgICAgPCEtLSDiiJIwLjMgLS0+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODMiCiAgICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMSwwLDAsLTAuMSwyMzMuMzEzMTQsNDYzLjE1ODQ0KSIKICAgICAgICAgICAgICAgaWQ9Imc2MiI+CiAgICAgICAgICAgICAgPGRlZnMKICAgICAgICAgICAgICAgICBpZD0iZGVmczUyIj4KICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICBkPSJtIDI1OTcsMjUxNiBxIDQ1MywtOTcgNzA3LC00MDQgMjU1LC0zMDYgMjU1LC03NTYgMCwtNjkwIC00NzUsLTEwNjkgLTQ3NSwtMzc4IC0xMzUwLC0zNzggLTI5MywwIC02MDQsNTggLTMxMSw1OCAtNjQyLDE3NCB2IDYwOSBxIDI2MiwtMTUzIDU3NCwtMjMxIDMxMywtNzggNjU0LC03OCA1OTMsMCA5MDQsMjM0IDMxMSwyMzQgMzExLDY4MSAwLDQxMyAtMjg5LDY0NSAtMjg5LDIzMyAtODA0LDIzMyBoIC01NDQgdiA1MTkgaCA1NjkgcSA0NjUsMCA3MTIsMTg2IDI0NywxODYgMjQ3LDUzNiAwLDM1OSAtMjU1LDU1MSAtMjU0LDE5MyAtNzI5LDE5MyAtMjYwLDAgLTU1NywtNTcgLTI5NywtNTYgLTY1MywtMTc0IHYgNTYyIHEgMzYwLDEwMCA2NzQsMTUwIDMxNCw1MCA1OTIsNTAgNzE5LDAgMTEzNywtMzI3IDQxOSwtMzI2IDQxOSwtODgyIDAsLTM4OCAtMjIyLC02NTUgLTIyMiwtMjY3IC02MzEsLTM3MCB6IgogICAgICAgICAgICAgICAgICAgaWQ9IkRlamFWdVNhbnMtMzMiCiAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMDE1NjI1KSIgLz4KICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTIyMTIiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTU0IgogICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjgzLjc4OTA2MiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlNTYiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjE0Ny40MTIxMSIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0yZSIKICAgICAgICAgICAgICAgICBpZD0idXNlNTgiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjE3OS4xOTkyMiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMyIKICAgICAgICAgICAgICAgICBpZD0idXNlNjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0ieHRpY2tfMyI+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF81Ij4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI3A4MzE4ZDllMWNmKSIKICAgICAgICAgICAgICAgZD0iTSAzMTMuMDkwOTEsNDQ4LjU2IFYgNjAuNDgiCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZGY2ZTMiCiAgICAgICAgICAgICAgIGlkPSJwYXRoNjYiIC8+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF82Ij4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgaWQ9Imc3MSI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODM7c3Ryb2tlOiM2NTdiODM7c3Ryb2tlLXdpZHRoOjAuOCIKICAgICAgICAgICAgICAgICB4PSIzMTMuMDkwOTEiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI20zZmI0NzcwMzI1IgogICAgICAgICAgICAgICAgIHk9IjQ0OC41NiIKICAgICAgICAgICAgICAgICBpZD0idXNlNjkiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9InRleHRfMyI+CiAgICAgICAgICAgIDwhLS0g4oiSMC4yIC0tPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjEsMCwwLC0wLjEsMzAwLjk0OTUsNDYzLjE1ODQ0KSIKICAgICAgICAgICAgICAgaWQ9Imc4NSI+CiAgICAgICAgICAgICAgPGRlZnMKICAgICAgICAgICAgICAgICBpZD0iZGVmczc1Ij4KICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICBkPSJNIDEyMjgsNTMxIEggMzQzMSBWIDAgSCA0NjkgdiA1MzEgcSAzNTksMzcyIDk3OSw5OTggNjIxLDYyNyA3ODAsODA5IDMwMywzNDAgNDIzLDU3NiAxMjEsMjM2IDEyMSw0NjQgMCwzNzIgLTI2MSw2MDYgLTI2MSwyMzUgLTY4MCwyMzUgLTI5NywwIC02MjcsLTEwMyAtMzI5LC0xMDMgLTcwNCwtMzEzIHYgNjM4IHEgMzgxLDE1MyA3MTIsMjMxIDMzMiw3OCA2MDcsNzggNzI1LDAgMTE1NiwtMzYzIDQzMSwtMzYyIDQzMSwtOTY4IDAsLTI4OCAtMTA4LC01NDYgLTEwNywtMjU3IC0zOTIsLTYwNyAtNzgsLTkxIC00OTcsLTUyNCBRIDE5OTEsMTMwOSAxMjI4LDUzMSBaIgogICAgICAgICAgICAgICAgICAgaWQ9IkRlamFWdVNhbnMtMzIiCiAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMDE1NjI1KSIgLz4KICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTIyMTIiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTc3IgogICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjgzLjc4OTA2MiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlNzkiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjE0Ny40MTIxMSIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0yZSIKICAgICAgICAgICAgICAgICBpZD0idXNlODEiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjE3OS4xOTkyMiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMiIKICAgICAgICAgICAgICAgICBpZD0idXNlODMiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0ieHRpY2tfNCI+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF83Ij4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI3A4MzE4ZDllMWNmKSIKICAgICAgICAgICAgICAgZD0iTSAzODAuNzI3MjcsNDQ4LjU2IFYgNjAuNDgiCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZGY2ZTMiCiAgICAgICAgICAgICAgIGlkPSJwYXRoODkiIC8+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF84Ij4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgaWQ9Imc5NCI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODM7c3Ryb2tlOiM2NTdiODM7c3Ryb2tlLXdpZHRoOjAuOCIKICAgICAgICAgICAgICAgICB4PSIzODAuNzI3MjYiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI20zZmI0NzcwMzI1IgogICAgICAgICAgICAgICAgIHk9IjQ0OC41NiIKICAgICAgICAgICAgICAgICBpZD0idXNlOTIiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9InRleHRfNCI+CiAgICAgICAgICAgIDwhLS0g4oiSMC4xIC0tPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjEsMCwwLC0wLjEsMzY4LjU4NTg3LDQ2My4xNTg0NCkiCiAgICAgICAgICAgICAgIGlkPSJnMTA4Ij4KICAgICAgICAgICAgICA8ZGVmcwogICAgICAgICAgICAgICAgIGlkPSJkZWZzOTgiPgogICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgIGQ9Ik0gNzk0LDUzMSBIIDE4MjUgViA0MDkxIEwgNzAzLDM4NjYgdiA1NzUgbCAxMTE2LDIyNSBoIDYzMSBWIDUzMSBIIDM0ODEgViAwIEggNzk0IFoiCiAgICAgICAgICAgICAgICAgICBpZD0iRGVqYVZ1U2Fucy0zMSIKICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC4wMTU2MjUpIiAvPgogICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMjIxMiIKICAgICAgICAgICAgICAgICBpZD0idXNlMTAwIgogICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjgzLjc4OTA2MiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlMTAyIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSIxNDcuNDEyMTEiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMmUiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTEwNCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTc5LjE5OTIyIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTMxIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UxMDYiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0ieHRpY2tfNSI+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF85Ij4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI3A4MzE4ZDllMWNmKSIKICAgICAgICAgICAgICAgZD0iTSA0NDguMzYzNjQsNDQ4LjU2IFYgNjAuNDgiCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZGY2ZTMiCiAgICAgICAgICAgICAgIGlkPSJwYXRoMTEyIiAvPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfMTAiPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBpZD0iZzExNyI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODM7c3Ryb2tlOiM2NTdiODM7c3Ryb2tlLXdpZHRoOjAuOCIKICAgICAgICAgICAgICAgICB4PSI0NDguMzYzNjUiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI20zZmI0NzcwMzI1IgogICAgICAgICAgICAgICAgIHk9IjQ0OC41NiIKICAgICAgICAgICAgICAgICBpZD0idXNlMTE1IgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJ0ZXh0XzUiPgogICAgICAgICAgICA8IS0tIDAuMCAtLT4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MyIKICAgICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4xLDAsMCwtMC4xLDQ0MC40MTIwNyw0NjMuMTU4NDQpIgogICAgICAgICAgICAgICBpZD0iZzEyNiI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTMwIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UxMjAiCiAgICAgICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iNjMuNjIzMDQ3IgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTJlIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UxMjIiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9Ijk1LjQxMDE1NiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlMTI0IgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9Inh0aWNrXzYiPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfMTEiPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjcDgzMThkOWUxY2YpIgogICAgICAgICAgICAgICBkPSJNIDUxNiw0NDguNTYgViA2MC40OCIKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZkZjZlMyIKICAgICAgICAgICAgICAgaWQ9InBhdGgxMzAiIC8+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF8xMiI+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIGlkPSJnMTM1Ij4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MztzdHJva2U6IzY1N2I4MztzdHJva2Utd2lkdGg6MC44IgogICAgICAgICAgICAgICAgIHg9IjUxNiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjbTNmYjQ3NzAzMjUiCiAgICAgICAgICAgICAgICAgeT0iNDQ4LjU2IgogICAgICAgICAgICAgICAgIGlkPSJ1c2UxMzMiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9InRleHRfNiI+CiAgICAgICAgICAgIDwhLS0gMC4xIC0tPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjEsMCwwLC0wLjEsNTA4LjA0ODQ0LDQ2My4xNTg0NCkiCiAgICAgICAgICAgICAgIGlkPSJnMTQ0Ij4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzAiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTEzOCIKICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI2My42MjMwNDciCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMmUiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTE0MCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iOTUuNDEwMTU2IgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTMxIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UxNDIiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIj4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJ5dGlja18xIj4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzEzIj4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI3A4MzE4ZDllMWNmKSIKICAgICAgICAgICAgICAgZD0iTSAxNDQsNDQ4LjU2IEggNTQ5LjgxODE4IgogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmRmNmUzIgogICAgICAgICAgICAgICBpZD0icGF0aDE0OSIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzE0Ij4KICAgICAgICAgICAgPGRlZnMKICAgICAgICAgICAgICAgaWQ9ImRlZnMxNTMiPgogICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgZD0iTSAwLDAgSCAtMy41IgogICAgICAgICAgICAgICAgIGlkPSJtZGExNmQyOGY0MSIKICAgICAgICAgICAgICAgICBzdHlsZT0ic3Ryb2tlOiM2NTdiODM7c3Ryb2tlLXdpZHRoOjAuOCIgLz4KICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBpZD0iZzE1NyI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODM7c3Ryb2tlOiM2NTdiODM7c3Ryb2tlLXdpZHRoOjAuOCIKICAgICAgICAgICAgICAgICB4PSIxNDQiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI21kYTE2ZDI4ZjQxIgogICAgICAgICAgICAgICAgIHk9IjQ0OC41NiIKICAgICAgICAgICAgICAgICBpZD0idXNlMTU1IgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJ0ZXh0XzciPgogICAgICAgICAgICA8IS0tIOKIkjAuNCAtLT4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MyIKICAgICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4xLDAsMCwtMC4xLDExMi43MTcxOSw0NTIuMzU5MjIpIgogICAgICAgICAgICAgICBpZD0iZzE2OCI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTIyMTIiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTE2MCIKICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI4My43ODkwNjIiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzAiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTE2MiIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTQ3LjQxMjExIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTJlIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UxNjQiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjE3OS4xOTkyMiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zNCIKICAgICAgICAgICAgICAgICBpZD0idXNlMTY2IgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9Inl0aWNrXzIiPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfMTUiPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjcDgzMThkOWUxY2YpIgogICAgICAgICAgICAgICBkPSJNIDE0NCwzODMuODggSCA1NDkuODE4MTgiCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZGY2ZTMiCiAgICAgICAgICAgICAgIGlkPSJwYXRoMTcyIiAvPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfMTYiPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBpZD0iZzE3NyI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODM7c3Ryb2tlOiM2NTdiODM7c3Ryb2tlLXdpZHRoOjAuOCIKICAgICAgICAgICAgICAgICB4PSIxNDQiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI21kYTE2ZDI4ZjQxIgogICAgICAgICAgICAgICAgIHk9IjM4My44OCIKICAgICAgICAgICAgICAgICBpZD0idXNlMTc1IgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJ0ZXh0XzgiPgogICAgICAgICAgICA8IS0tIOKIkjAuMyAtLT4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MyIKICAgICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4xLDAsMCwtMC4xLDExMi43MTcxOSwzODcuNjc5MjIpIgogICAgICAgICAgICAgICBpZD0iZzE4OCI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTIyMTIiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTE4MCIKICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI4My43ODkwNjIiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzAiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTE4MiIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTQ3LjQxMjExIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTJlIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UxODQiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjE3OS4xOTkyMiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMyIKICAgICAgICAgICAgICAgICBpZD0idXNlMTg2IgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9Inl0aWNrXzMiPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfMTciPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjcDgzMThkOWUxY2YpIgogICAgICAgICAgICAgICBkPSJNIDE0NCwzMTkuMiBIIDU0OS44MTgxOCIKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZkZjZlMyIKICAgICAgICAgICAgICAgaWQ9InBhdGgxOTIiIC8+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF8xOCI+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIGlkPSJnMTk3Ij4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MztzdHJva2U6IzY1N2I4MztzdHJva2Utd2lkdGg6MC44IgogICAgICAgICAgICAgICAgIHg9IjE0NCIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjbWRhMTZkMjhmNDEiCiAgICAgICAgICAgICAgICAgeT0iMzE5LjIwMDAxIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UxOTUiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9InRleHRfOSI+CiAgICAgICAgICAgIDwhLS0g4oiSMC4yIC0tPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjEsMCwwLC0wLjEsMTEyLjcxNzE5LDMyMi45OTkyMikiCiAgICAgICAgICAgICAgIGlkPSJnMjA4Ij4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMjIxMiIKICAgICAgICAgICAgICAgICBpZD0idXNlMjAwIgogICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjgzLjc4OTA2MiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlMjAyIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSIxNDcuNDEyMTEiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMmUiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTIwNCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTc5LjE5OTIyIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTMyIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UyMDYiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0ieXRpY2tfNCI+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF8xOSI+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwODMxOGQ5ZTFjZikiCiAgICAgICAgICAgICAgIGQ9Ik0gMTQ0LDI1NC41MiBIIDU0OS44MTgxOCIKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZkZjZlMyIKICAgICAgICAgICAgICAgaWQ9InBhdGgyMTIiIC8+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF8yMCI+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIGlkPSJnMjE3Ij4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MztzdHJva2U6IzY1N2I4MztzdHJva2Utd2lkdGg6MC44IgogICAgICAgICAgICAgICAgIHg9IjE0NCIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjbWRhMTZkMjhmNDEiCiAgICAgICAgICAgICAgICAgeT0iMjU0LjUyIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UyMTUiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9InRleHRfMTAiPgogICAgICAgICAgICA8IS0tIOKIkjAuMSAtLT4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MyIKICAgICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4xLDAsMCwtMC4xLDExMi43MTcxOSwyNTguMzE5MjIpIgogICAgICAgICAgICAgICBpZD0iZzIyOCI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTIyMTIiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTIyMCIKICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI4My43ODkwNjIiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzAiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTIyMiIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTQ3LjQxMjExIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTJlIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UyMjQiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjE3OS4xOTkyMiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMSIKICAgICAgICAgICAgICAgICBpZD0idXNlMjI2IgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9Inl0aWNrXzUiPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfMjEiPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjcDgzMThkOWUxY2YpIgogICAgICAgICAgICAgICBkPSJNIDE0NCwxODkuODQgSCA1NDkuODE4MTgiCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZGY2ZTMiCiAgICAgICAgICAgICAgIGlkPSJwYXRoMjMyIiAvPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfMjIiPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBpZD0iZzIzNyI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODM7c3Ryb2tlOiM2NTdiODM7c3Ryb2tlLXdpZHRoOjAuOCIKICAgICAgICAgICAgICAgICB4PSIxNDQiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI21kYTE2ZDI4ZjQxIgogICAgICAgICAgICAgICAgIHk9IjE4OS44NCIKICAgICAgICAgICAgICAgICBpZD0idXNlMjM1IgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJ0ZXh0XzExIj4KICAgICAgICAgICAgPCEtLSAwLjAgLS0+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODMiCiAgICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMSwwLDAsLTAuMSwxMjEuMDk2ODcsMTkzLjYzOTIyKSIKICAgICAgICAgICAgICAgaWQ9ImcyNDYiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlMjQwIgogICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjYzLjYyMzA0NyIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0yZSIKICAgICAgICAgICAgICAgICBpZD0idXNlMjQyIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI5NS40MTAxNTYiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzAiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTI0NCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJ5dGlja182Ij4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzIzIj4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI3A4MzE4ZDllMWNmKSIKICAgICAgICAgICAgICAgZD0iTSAxNDQsMTI1LjE2IEggNTQ5LjgxODE4IgogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmRmNmUzIgogICAgICAgICAgICAgICBpZD0icGF0aDI1MCIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzI0Ij4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgaWQ9ImcyNTUiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzO3N0cm9rZTojNjU3YjgzO3N0cm9rZS13aWR0aDowLjgiCiAgICAgICAgICAgICAgICAgeD0iMTQ0IgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNtZGExNmQyOGY0MSIKICAgICAgICAgICAgICAgICB5PSIxMjUuMTYiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTI1MyIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0idGV4dF8xMiI+CiAgICAgICAgICAgIDwhLS0gMC4xIC0tPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjEsMCwwLC0wLjEsMTIxLjA5Njg3LDEyOC45NTkyMikiCiAgICAgICAgICAgICAgIGlkPSJnMjY0Ij4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzAiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTI1OCIKICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI2My42MjMwNDciCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMmUiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTI2MCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iOTUuNDEwMTU2IgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTMxIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UyNjIiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0ieXRpY2tfNyI+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF8yNSI+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwODMxOGQ5ZTFjZikiCiAgICAgICAgICAgICAgIGQ9Ik0gMTQ0LDYwLjQ4IEggNTQ5LjgxODE4IgogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmRmNmUzIgogICAgICAgICAgICAgICBpZD0icGF0aDI2OCIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzI2Ij4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgaWQ9ImcyNzMiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzO3N0cm9rZTojNjU3YjgzO3N0cm9rZS13aWR0aDowLjgiCiAgICAgICAgICAgICAgICAgeD0iMTQ0IgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNtZGExNmQyOGY0MSIKICAgICAgICAgICAgICAgICB5PSI2MC40OCIKICAgICAgICAgICAgICAgICBpZD0idXNlMjcxIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJ0ZXh0XzEzIj4KICAgICAgICAgICAgPCEtLSAwLjIgLS0+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODMiCiAgICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMSwwLDAsLTAuMSwxMjEuMDk2ODcsNjQuMjc5MjE5KSIKICAgICAgICAgICAgICAgaWQ9ImcyODIiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlMjc2IgogICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjYzLjYyMzA0NyIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0yZSIKICAgICAgICAgICAgICAgICBpZD0idXNlMjc4IgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI5NS40MTAxNTYiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzIiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTI4MCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICBpZD0iTGluZUNvbGxlY3Rpb25fMSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjcDgzMThkOWUxY2YpIgogICAgICAgICAgIGQ9Im0gNDQ4LjE2MDMyLDIxNS43NjczIC0yNi41NzAyLC0yNS40MDg4MiAtMC4yNjc0NywtMC43ODExOCAyNi44NDQ5LC0yNS42NjExNSAwLjgwNjAzLDAuMzg1NCAyNi40MzQ2NiwyNS4yNzkyMSAtMC40MTAyNCwwLjkxMDc5IC0yNi4wMjQ0MiwyNC44ODY5IC0wLjgxMzI2LDAuMzg4ODUgdiAwIgogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM0NDAxNTQ7c3Ryb2tlLXdpZHRoOjIiCiAgICAgICAgICAgaWQ9InBhdGgyODciIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9IkxpbmVDb2xsZWN0aW9uXzIiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI3A4MzE4ZDllMWNmKSIKICAgICAgICAgICBkPSJtIDQ0OC4xNjAzMiwyMzkuMjc2ODcgLTUxLjE1NDMzLC00OC45MTgzOSAtMC4yNzEwOCwtMC43Nzc3MiA1MS40MjU0MSwtNDkuMTc3NjMgMC44MTMyNiwwLjM4ODg2IDUxLjAxODc5LDQ4Ljc4ODc3IC0wLjI3MTA5LDAuNzc3NzIgLTUwLjc0NzcsNDguNTI5NTMgLTAuODEzMjYsMC4zODg4NiB2IDAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzJmNmI4ZTtzdHJva2Utd2lkdGg6MiIKICAgICAgICAgICBpZD0icGF0aDI5MCIgLz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICBpZD0iTGluZUNvbGxlY3Rpb25fMyI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjcDgzMThkOWUxY2YpIgogICAgICAgICAgIGQ9Im0gNDQ4LjE2MDMyLDI4My45NDUwMyAtOTcuODY0MTcsLTkzLjU4NjU1IC0wLjI3MTA4LC0wLjc3NzcyIDk4LjEzNTI1LC05My44NDU3OTIgMC45NTAzNCwwLjUxOTk0MiA5Ny41OTE1NSw5My4zMjU4NSAtMC4yNzEwOSwwLjc3NzcyIC05Ny43MjU1Niw5My4zMjU4NSAtMC41NDUyNCwwLjI2MDcgdiAwIgogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZGU3MjU7c3Ryb2tlLXdpZHRoOjIiCiAgICAgICAgICAgaWQ9InBhdGgyOTMiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9IkxpbmVDb2xsZWN0aW9uXzQiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI3A4MzE4ZDllMWNmKSIKICAgICAgICAgICBkPSJtIDI2MS4xMDk4NiwzMzMuNDY0NzIgLTIuNDM5NzksLTAuMTcyNTcgLTMuMjUzMDUsLTAuNDg4MzEgLTIuNDM5NzksLTAuNTY0NzMgLTIuNDM5NzksLTAuNzM4NDMgLTIuOTkzNTEsLTEuMTUzNDIgLTEuODg2MDcsLTAuODY5ODIgLTIuNzEzODUsLTEuNDYzMzMgLTIuNDY4NjMsLTEuNTU1NDMgLTIuMTY5MjksLTEuNTU1NDMgLTIuODM3NDksLTIuMzMzMTUgLTIuNDczODYsLTIuMzMzMTUgLTIuMTkzODksLTIuMzMzMTQgLTIuMjIxNTEsLTIuNjUwOTIgLTIuNDM5NzksLTMuMzAzNDYgLTIuMTg0OTQsLTMuMzc4MjEgLTEuODgxMzcsLTMuMjk2OTcgLTEuODU0MjcsLTMuNzAyNDcgLTEuNjkyMzcsLTMuODg4NTcgLTEuNDU5OTksLTMuODg4NTggLTEuNDc0MjksLTQuNjY2MjkgLTEuMDE0NzMsLTMuODg4NTggLTAuOTgxNjQsLTQuNjY2MjkgLTAuNzM4NDIsLTQuNjY2MyAtMC41MDYzNSwtNC42NjYyOSAtMC4yNzc5OSwtNC42NjYyOSAtMC4wNTY2LC00LjY2NjI5IDAuMTY0MiwtNC42NjYzIDAuMzg5MTEsLTQuNjY2MjkgMC42MTY2OCwtNC42NjYyOSAwLjg1NTc5LC00LjY2NjI5IDEuMTA3MjMsLTQuNjY2MyAxLjIzMDc5LC00LjIyMTE4IDEuNTEyNTgsLTQuMzMzNjkgMS41OTI4MywtMy44ODg1NyAxLjg0MTQ2LC0zLjg4ODU4IDIuMTI3OTUsLTMuODg4NTggMS45MzgwNywtMy4xMTA4NiAyLjM3Mjc5LC0zLjM1NTUxIDIuNDM5NzksLTMuMDI0MzIgMi43MywtMi45NTI3NSAyLjQ2NTkxLC0yLjMzMzE1IDIuMTIzNDUsLTEuNzg0NTkgMi44NjMyMSwtMi4xMDM5OSAyLjQ1NTQxLC0xLjU1NTQzIDIuODE0MDEsLTEuNTIyNjggMi40Mzk3OSwtMS4xMDQ3MyAyLjQzOTc5LC0wLjkxODI0IDIuNDM5NzksLTAuNzM4MzkgMi40Mzk3OSwtMC41NjQ1NSAzLjI1MzA1LC0wLjQ4ODcyIDIuNDM5NzksLTAuMTcyMDcgMy4yNTMwNSwwLjAyNzYgMi40Mzk3OSwwLjIxNDMgMy4yNTMwNSwwLjU0NDYyIDIuNDM5NzksMC42MDgzNiAzLjAzNzk0LDEuMDAzNiAyLjY1NDksMS4xMDc4NCAyLjQ1MjA3LDEuMjI1MzEgMi42NDQ3MywxLjU1NTQzIDIuMjk1OTIsMS41NTU0MyAyLjM2NjQzLDEuODIzMjIgMi40Mzk3OSwyLjEzMjc3IDIuNDM5NzksMi40MjA5NCAyLjYxMjQ2LDIuOTU1NjUgMi40MDc4MSwzLjExMDg2IDIuMjk5MDksMy4zODc1MyAyLjE0MjcxLDMuNjExOTEgMS45MjM2MSwzLjcxMTEgMS42MjY1MiwzLjU5NTA3IDEuNjI2NTMsNC4xNjAxOCAxLjM1NjExLDQuMDg3OTYgMS4wODk0OSwzLjg4ODU4IDEuMDYxOTMsNC42NjYyOSAwLjgxNTA5LDQuNjY2MjkgMC41ODAyMyw0LjY2NjMgMC4zNDk1Nyw0LjY2NjI5IDAuMTI3OSw0LjY2NjI5IC0wLjA5MzgsNC42NjYyOSAtMC4zMTU0Miw0LjY2NjMgLTAuNTQ0NDEsNC42NjYyOSAtMC43NzgwOCw0LjY2NjI5IC0xLjAyMzY1LDQuNjY2MjkgLTEuMDUyMjQsMy44ODg1OCAtMS41MjIxMSw0LjY2NjI5IC0xLjUwNDc2LDMuODg4NTggLTEuNzQxNjgsMy44ODg1OCAtMS42ODM3OCwzLjI5MDQ3IC0yLjE2MjUzLDMuNzA4OTcgLTIuMDYyODMsMy4xMTA4NiAtMi4zMzU2NywzLjExMDg2IC0yLjY3MzM1LDMuMTEwODYgLTIuMjc4NDcsMi4zMzMxNSAtMi41ODUyNywyLjMzMzE1IC0yLjE2NzEzLDEuNzI4ODEgLTIuNDM5NzksMS43MTY1OSAtMi40Mzk3OSwxLjQ5NDEyIC0yLjQzOTc5LDEuMjg3MTYgLTIuNDM5NzksMS4wODkwOCAtMi40Mzk3OSwwLjkwMzQ2IC0yLjQzOTc5LDAuNzI0MSAtMi40Mzk3OSwwLjU1MDczIC0zLjI1MzA1LDAuNDcwNDIgLTMuMjUzMDUsMC4xNzUwOSAtMS42MjY1MiwtMC4wMjI3IHYgMCIKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNDQwMTU0O3N0cm9rZS13aWR0aDoyIgogICAgICAgICAgIGlkPSJwYXRoMjk2IiAvPgogICAgICA8L2c+CiAgICAgIDxnCiAgICAgICAgIGlkPSJMaW5lQ29sbGVjdGlvbl81Ij4KICAgICAgICA8cGF0aAogICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwODMxOGQ5ZTFjZikiCiAgICAgICAgICAgZD0ibSAyNTYuMjMwMjgsMzY2LjE5NjQxIC0zLjI1MzA1LC0wLjQ4MzMgLTMuMjUzMDUsLTAuNjg3NDMgLTMuMjUzMDYsLTAuODk2MjcgLTMuMjc0MzYsLTEuMTE4MTEgLTMuNzQyMTEsLTEuNTU1NDMgLTMuMTY3NzYsLTEuNTU1NDMgLTIuODI3OTcsLTEuNTgxODYgLTMuNjExNTgsLTIuMzA2NzIgLTMuMjA5NzUsLTIuMzMzMTQgLTIuOTM3ODMsLTIuMzg3NSAtMy4zNTk2NiwtMy4wNTY1MSAtMy4xNDY0NCwtMy4yMDc3NSAtMi42NjcyMSwtMy4wMTM5NyAtMy4wMjU2MywtMy43ODUyNiAtMi40Mzk3OSwtMy4zNzk0NiAtMi40NDQyOSwtMy43MjMzIC0yLjQzNTI5LC00LjEwNjc4IC0yLjQzOTc5LC00LjU5MTUzIC0yLjE0MjE3LC00LjUyMjg1IC0xLjk2ODYsLTQuNjY2MyAtMS43NDE2OSwtNC42NjYyOSAtMS43NzAxNywtNS40NDQwMSAtMS41MDg5NSwtNS40NDQgLTEuMjYzNSwtNS40NDQwMSAtMS4wMzE3MywtNS40NDQwMSAtMC44MDg3MywtNS40NDQwMSAtMC41OTMsLTUuNDQ0MDEgLTAuMzgzNjMsLTUuNDQ0IC0wLjE3NjcyLC01LjQ0NDAxIDAuMDI4MiwtNS40NDQwMSAwLjIzMzA1LC01LjQ0NDAxIDAuNDQxNSwtNS40NDQwMSAwLjY1MTc3LC01LjQ0NCAwLjg2OTE5LC01LjQ0NDAxIDEuMDk0MTEsLTUuNDQ0MDEgMS4zMjkyMSwtNS40NDQwMSAxLjU3ODY1LC01LjQ0NDAxIDEuODQ2NTMsLTUuNDQ0IDEuODEyMjcsLTQuNjY2MyAyLjA0NDA5LC00LjY2NjI5IDIuMjk5MzEsLTQuNjY2MjkgMi41ODcyNywtNC42NjYyOSAyLjQwMzE5LC0zLjg4ODU4IDIuNjYyNDcsLTMuODg4NTggMi44OTM4MiwtMy44MDUyNCAyLjY5MjM2LC0zLjE5NDIgMy4wMDA0OCwtMy4yMjAyMiAzLjI1MzA1LC0zLjEyNzA4IDMuNDk5NDIsLTIuOTg1MjggMy4wNzczMSwtMi4zMzMxNSAzLjQ4MjMzLC0yLjMzMzE1IDIuOTUzMTQsLTEuNzQzNTkgMy4yNTMwNSwtMS42ODI0NyAzLjI1MzA2LC0xLjQ0NjYzIDMuNjM2OTksLTEuMzQ5MDMgMi44NjkxMSwtMC44NzQ0IDMuMjUzMDUsLTAuNzkxMjEgMy44Mzk2NSwtMC42Njc1MyAyLjY2NjQ1LC0wLjI5ODQ4IDMuMjUzMDYsLTAuMTgwODUgMy4yNTMwNSwwLjAxODkgMy4yNTMwNSwwLjIxODY3IDMuMjUzMDUsMC40MTk3NyAzLjI1MzA1LDAuNjIzMDYgMy4yNTMwNSwwLjgzMTAzIDMuMjUzMDYsMS4wNDM4NSAzLjI1MzA1LDEuMjYyMDQgMy4yODQ2MSwxLjUwNiAzLjIyMTQ5LDEuNzEzMzUgMy41NTAxNCwyLjE3NTIzIDMuMzMzMTQsMi4zMzMxNSAyLjk2ODc1LDIuMzMzMTQgMy4xNjAxOCwyLjc3MjkzIDMuMjUzMDUsMy4xOTUzOCAzLjA2NDM3LDMuMzY0MjggMi42Mjg0NywzLjE5MjIyIDIuODMyNzYsMy44MDcyMiAyLjYwNzQsMy44ODg1NyAyLjM1NTU1LDMuODg4NTggMi4xMzQ0LDMuODg4NTggMi4zMDA3MSw0LjY2NjI5IDIuMDQzMjYsNC42NjYyOSAxLjgxMjgzLDQuNjY2MyAxLjU5OTA5LDQuNjY2MjkgMS40MDA0Niw0LjY2NjI5IDEuMzk5NTcsNS40NDQwMSAxLjE1OTYyLDUuNDQ0MDEgMC45MzI2MSw1LjQ0NCAwLjcxMzIsNS40NDQwMSAwLjUwMTAyLDUuNDQ0MDEgMC4yOTIzNiw1LjQ0NDAxIDAuMDg2OSw1LjQ0NDAxIC0wLjExODUsNS40NDQgLTAuMzIzOTQsNS40NDQwMSAtMC41MzM2NCw1LjQ0NDAxIC0wLjc0NjU2LDUuNDQ0MDEgLTAuOTY2NzQsNS40NDQwMSAtMS4xOTUwMyw1LjQ0NDAxIC0xLjQzNzU0LDUuNDQ0IC0xLjQzNTg1LDQuNjY2MyAtMS42MzYyMyw0LjY2NjI5IC0xLjk1MjI2LDQuOTAzODkgLTEuOTg4NjEsNC40Mjg2OSAtMi4zNDg3OCw0LjY2NjMgLTIuMTc4MzMsMy44ODg1NyAtMi40MzAxOCwzLjkyNDExIC0yLjY0MzksMy44NTMwNSAtMi45NjY0NSwzLjg4ODU4IC0yLjYyOTA1LDMuMTEwODYgLTMuMTQ2MjgsMy4zNjA4OCAtMy4yNTMwNSwzLjEwNTU1IC0zLjM3NTExLDIuODY2MTUgLTMuMTMwOTksMi4zNjUwMSAtMy40NDk1NiwyLjMwMTI4IC0zLjA1NjU0LDEuNzkzNDkgLTMuMjUzMDUsMS42Njc4OCAtMy4yNTMwNiwxLjQzMjYzIC0zLjYxNzY2LDEuMzI3NzMgLTIuODg4NDQsMC44NjkzNCAtMy4yNTMwNSwwLjc3ODU4IC0zLjI1MzA1LDAuNTcyMjMgLTMuMjUzMDUsMC4zNjkxMyAtMy4yNTMwNiwwLjE2ODY0IC0zLjI1MzA1LC0wLjAzMSAtMy4yNTMwNSwtMC4yMzA2NiAtMC44MTMyNiwtMC4wODg4IHYgMCIKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMjk3YThlO3N0cm9rZS13aWR0aDoyIgogICAgICAgICAgIGlkPSJwYXRoMjk5IiAvPgogICAgICA8L2c+CiAgICAgIDxnCiAgICAgICAgIGlkPSJMaW5lQ29sbGVjdGlvbl82Ij4KICAgICAgICA8cGF0aAogICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwODMxOGQ5ZTFjZikiCiAgICAgICAgICAgZD0ibSAyNTMuNzkwNDksNDAwLjM1NDExIC00LjA2NjMxLC0wLjYxODYgLTQuMDY2MzIsLTAuODU4MzIgLTQuMDY2MzEsLTEuMTAzNTMgLTQuMDY2MzIsLTEuMzUzNzkgLTQuMDY2MzEsLTEuNjEyOTMgLTQuMDY2MzIsLTEuODgxMzkgLTQuMDY2MzEsLTIuMTYxMDggLTQuMDY2MzIsLTIuNDU1ODUgLTQuMDMyODQsLTIuNzQzNTcgLTMuMjg2NTIsLTIuNDc4MDUgLTMuNTgxOCwtMi45NjU5NiAtMy40MjMyMSwtMy4xMTA4NiAtMy4xMzkzOSwtMy4xMTA4NiAtMi45MDAzMSwtMy4xMTA4NiAtMy4zMzQ0MywtMy44ODg1OCAtMy4xMzkxNywtMy45OTYzOCAtMy4yNzIyNiwtNC41NTg0OSAtMy4yMzM4NCwtNC45NTc5OCAtMi42MDU2MywtNC4zNzQ2MSAtMi41NTAwOSwtNC42NjYyOSAtMi43MDQ5MSwtNS40NDQwMSAtMi40NDAwNCwtNS40NDQgLTIuMTk3NDEsLTUuNDQ0MDEgLTIuMTQwNjYsLTUuOTM0ODYgLTEuODMwNjUsLTUuNzMwODcgLTEuNzQxNTQsLTYuMjIxNzMgLTEuNDk5NTcsLTYuMjIxNzIgLTEuMjY4NDksLTYuMjIxNzIgLTEuMDQ2ODksLTYuMjIxNzMgLTAuODMxODUsLTYuMjIxNzIgLTAuNjIyNjUsLTYuMjIxNzIgLTAuNDE3MDQsLTYuMjIxNzMgLTAuMjE0ODYsLTYuMjIxNzIgLTAuMDEzNSwtNi4yMjE3MiAwLjE4Nzc4LC02LjIyMTczIDAuMzg5NDEsLTYuMjIxNzIgMC41OTUzNCwtNi4yMjE3MyAwLjgwMzUyLC02LjIyMTcyIDEuMDE2NzcsLTYuMjIxNzIgMS4yMzg5MywtNi4yMjE3MyAxLjQ2NzYyLC02LjIyMTcyIDEuNzA4NDQsLTYuMjIxNzIgMS45NjI0LC02LjIyMTczIDEuOTM5OSwtNS40NDQgMi4yNDMyOSwtNS42MzkxMiAyLjQzOTc5LC01LjUwNjk3IDIuNTQyNDEsLTUuMTg1OTQgMi45NTA5OCwtNS40NDQwMSAyLjc4NDIyLC00LjY2NjI5IDMuMTA4MDcsLTQuNzUzMjIgMy4yODk2NywtNC41NzkzNiAzLjIxNjQzLC00LjA4NjQ3IDMuMjUzMDUsLTMuNzg1ODkgMy41NzAzLC0zLjc5MzM4IDMuMjAwNTMsLTMuMTEwODYgMy44MDE1OSwtMy4zNjk0NCAzLjU1Mjg2LC0yLjg1MjI4IDMuNzY2NTEsLTIuNzM1OTcgNC4wNjYzMSwtMi42NDEyMSAzLjI1MzA1LC0xLjg5MTk5IDQuMDY2MzIsLTIuMTA0NDggNC4wNjYzMSwtMS44MjYwOSA0LjA2NjMxLC0xLjU2MDM3IDQuMDY2MzIsLTEuMzAzOCA0LjA2NjMxLC0xLjA1MzUxIDQuMDY2MzIsLTAuODEwMSA0LjA2NjMxLC0wLjU3MDgzIDQuMDY2MzIsLTAuMzM0MDIgNC4wNjYzMSwtMC4wOTk1IDQuMDY2MzIsMC4xMzUwMiA0LjA2NjMxLDAuMzY5NTQgNC4wNjYzMSwwLjYwNjk1IDQuMDY2MzIsMC44NDY2NSA0LjA2NjMxLDEuMDkxMTQgNC4zMzE4OCwxLjQzOTEyIDMuOTIzMzgsMS41NTU0MyAzLjk0MzY5LDEuODE1MzEgNC4wNjYzMSwyLjE0NjkzIDQuMDY2MzIsMi40NDEzIDQuMDY2MzEsMi43NTI0NSAzLjM0MTIsMi41MDk3NSAzLjc1OTI2LDMuMTEwODYgMy40NzE5NiwzLjE2MTk5IDMuODI0NTYsMy44Mzc0NSAyLjg0MDcyLDMuMTEwODYgMy4yNzE2MSwzLjg4ODU4IDMuMDc1MzEsMy45ODU0MyAzLjI1MzA2LDQuNjExNTEgMi45NzM0Myw0LjYyNDIyIDIuNzQ0LDQuNjY2MjkgMi45MDY3MSw1LjQ0NDAxIDIuMjY1MjQsNC42NjYyOSAyLjQwMTQ3LDUuNDQ0MDEgMi4xNjI3LDUuNDQ0MDEgMi4xOTg3Miw2LjIyMTcyIDEuODY2MDMsNS45OTkzNCAxLjYyNjUzLDUuOTg0NzEgMS4zODY1Myw1LjkwMzQgMS4yMzgyMyw2LjIyMTczIDEuMDE3MDksNi4yMjE3MiAwLjgwMzUsNi4yMjE3MiAwLjU5NTIxLDYuMjIxNzMgMC4zODk4OSw2LjIyMTcyIDAuMTg4MTYsNi4yMjE3MyAtMC4wMTM2LDYuMjIxNzIgLTAuMjE1MjksNi4yMjE3MiAtMC40MTcwMiw2LjIyMTczIC0wLjYyMzEzLDYuMjIxNzIgLTAuODMxODksNi4yMjE3MiAtMS4wNzc5Miw2LjM5MjQzIC0xLjIzNzIxLDYuMDUxMDIgLTEuNDk5MzEsNi4yMjE3MiAtMS43NDE3OSw2LjIyMTczIC0xLjczMzg1LDUuNDQ0MDEgLTEuOTQxMjMsNS40NDQgLTIuNDE5MDMsNi4wNDc4NCAtMi4xNTAyMiw0Ljg0MDE4IC0yLjI2NzgzLDQuNjY2MjkgLTIuNDc2NDYsNC42NjYyOSAtMi44NjQ2NCw0LjkyODg3IC0yLjgwMTc5LDQuNDAzNzIgLTIuODkxMDUsNC4xNzQ5MyAtMy4zMTM5Nyw0LjM3OTk0IC0zLjIxODgxLDMuODg4NTggLTMuNTI0MywzLjg4ODU3IC0zLjA3NTE5LDMuMTEwODYgLTMuMzQ3NzgsMy4xMTA4NyAtMy44NTE1MywzLjI1Mzk4IC00LjA2NjMxLDMuMDg1NCAtNC4wNjYzMSwyLjc1MjI1IC00LjA2NjMyLDIuNDQxMjUgLTQuMDY2MzEsMi4xNDcwMiAtNC4wODA3OCwxLjg3NDQgLTQuMDUxODUsMS41OTM4NiAtNC4wNjYzMiwxLjM0MTU0IC00LjA2NjMxLDEuMDkxMzQgLTQuMDY2MzIsMC44NDY2MSAtNC4wNjYzMSwwLjYwNzAzIC00LjA2NjMxLDAuMzY5MzggLTQuMDY2MzIsMC4xMzQ5NiAtNC4wNjYzMSwtMC4wOTk1IC00LjA2NjMyLC0wLjMzMzg3IC0wLjgxMzI2LC0wLjA5NDkgdiAwIgogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZGU3MjU7c3Ryb2tlLXdpZHRoOjIiCiAgICAgICAgICAgaWQ9InBhdGgzMDIiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9InBhdGNoXzMiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSAxNDQsNDQ4LjU2IFYgNjAuNDgiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2VlZThkNTtzdHJva2Utd2lkdGg6MC44O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXIiCiAgICAgICAgICAgaWQ9InBhdGgzMDUiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9InBhdGNoXzQiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSA1NDkuODE4MTgsNDQ4LjU2IFYgNjAuNDgiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2VlZThkNTtzdHJva2Utd2lkdGg6MC44O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXIiCiAgICAgICAgICAgaWQ9InBhdGgzMDgiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9InBhdGNoXzUiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSAxNDQsNDQ4LjU2IEggNTQ5LjgxODE4IgogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlZWU4ZDU7c3Ryb2tlLXdpZHRoOjAuODtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyIgogICAgICAgICAgIGlkPSJwYXRoMzExIiAvPgogICAgICA8L2c+CiAgICAgIDxnCiAgICAgICAgIGlkPSJwYXRjaF82Ij4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gMTQ0LDYwLjQ4IEggNTQ5LjgxODE4IgogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlZWU4ZDU7c3Ryb2tlLXdpZHRoOjAuODtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyIgogICAgICAgICAgIGlkPSJwYXRoMzE0IiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZwogICAgICAgaWQ9ImF4ZXNfMiI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJwYXRjaF83Ij4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gNjMwLjk4MTgyLDQ0OC41NiBIIDEwMzYuOCBWIDYwLjQ4IEggNjMwLjk4MTgyIFoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2VlZThkNSIKICAgICAgICAgICBpZD0icGF0aDMxOCIgLz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICBpZD0ibWF0cGxvdGxpYi5heGlzXzMiPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9Inh0aWNrXzciPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfMjciPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjcDYwOTQ3ZjVhOWMpIgogICAgICAgICAgICAgICBkPSJNIDY2NC44LDQ0OC41NiBWIDYwLjQ4IgogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmRmNmUzIgogICAgICAgICAgICAgICBpZD0icGF0aDMyMSIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzI4Ij4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgaWQ9ImczMjYiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzO3N0cm9rZTojNjU3YjgzO3N0cm9rZS13aWR0aDowLjgiCiAgICAgICAgICAgICAgICAgeD0iNjY0Ljc5OTk5IgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNtM2ZiNDc3MDMyNSIKICAgICAgICAgICAgICAgICB5PSI0NDguNTYiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTMyNCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0idGV4dF8xNCI+CiAgICAgICAgICAgIDwhLS0g4oiSMC40IC0tPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjEsMCwwLC0wLjEsNjUyLjY1ODU5LDQ2My4xNTg0NCkiCiAgICAgICAgICAgICAgIGlkPSJnMzM3Ij4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMjIxMiIKICAgICAgICAgICAgICAgICBpZD0idXNlMzI5IgogICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjgzLjc4OTA2MiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlMzMxIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSIxNDcuNDEyMTEiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMmUiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTMzMyIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTc5LjE5OTIyIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTM0IgogICAgICAgICAgICAgICAgIGlkPSJ1c2UzMzUiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0ieHRpY2tfOCI+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF8yOSI+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwNjA5NDdmNWE5YykiCiAgICAgICAgICAgICAgIGQ9Ik0gNzMyLjQzNjM2LDQ0OC41NiBWIDYwLjQ4IgogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmRmNmUzIgogICAgICAgICAgICAgICBpZD0icGF0aDM0MSIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzMwIj4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgaWQ9ImczNDYiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzO3N0cm9rZTojNjU3YjgzO3N0cm9rZS13aWR0aDowLjgiCiAgICAgICAgICAgICAgICAgeD0iNzMyLjQzNjM0IgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNtM2ZiNDc3MDMyNSIKICAgICAgICAgICAgICAgICB5PSI0NDguNTYiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTM0NCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0idGV4dF8xNSI+CiAgICAgICAgICAgIDwhLS0g4oiSMC4zIC0tPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjEsMCwwLC0wLjEsNzIwLjI5NDk2LDQ2My4xNTg0NCkiCiAgICAgICAgICAgICAgIGlkPSJnMzU3Ij4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMjIxMiIKICAgICAgICAgICAgICAgICBpZD0idXNlMzQ5IgogICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjgzLjc4OTA2MiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlMzUxIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSIxNDcuNDEyMTEiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMmUiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTM1MyIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTc5LjE5OTIyIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTMzIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UzNTUiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0ieHRpY2tfOSI+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF8zMSI+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwNjA5NDdmNWE5YykiCiAgICAgICAgICAgICAgIGQ9Ik0gODAwLjA3MjczLDQ0OC41NiBWIDYwLjQ4IgogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmRmNmUzIgogICAgICAgICAgICAgICBpZD0icGF0aDM2MSIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzMyIj4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgaWQ9ImczNjYiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzO3N0cm9rZTojNjU3YjgzO3N0cm9rZS13aWR0aDowLjgiCiAgICAgICAgICAgICAgICAgeD0iODAwLjA3Mjc1IgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNtM2ZiNDc3MDMyNSIKICAgICAgICAgICAgICAgICB5PSI0NDguNTYiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTM2NCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0idGV4dF8xNiI+CiAgICAgICAgICAgIDwhLS0g4oiSMC4yIC0tPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjEsMCwwLC0wLjEsNzg3LjkzMTMyLDQ2My4xNTg0NCkiCiAgICAgICAgICAgICAgIGlkPSJnMzc3Ij4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMjIxMiIKICAgICAgICAgICAgICAgICBpZD0idXNlMzY5IgogICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjgzLjc4OTA2MiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlMzcxIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSIxNDcuNDEyMTEiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMmUiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTM3MyIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTc5LjE5OTIyIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTMyIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UzNzUiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0ieHRpY2tfMTAiPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfMzMiPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjcDYwOTQ3ZjVhOWMpIgogICAgICAgICAgICAgICBkPSJNIDg2Ny43MDkwOSw0NDguNTYgViA2MC40OCIKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZkZjZlMyIKICAgICAgICAgICAgICAgaWQ9InBhdGgzODEiIC8+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF8zNCI+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIGlkPSJnMzg2Ij4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MztzdHJva2U6IzY1N2I4MztzdHJva2Utd2lkdGg6MC44IgogICAgICAgICAgICAgICAgIHg9Ijg2Ny43MDkxMSIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjbTNmYjQ3NzAzMjUiCiAgICAgICAgICAgICAgICAgeT0iNDQ4LjU2IgogICAgICAgICAgICAgICAgIGlkPSJ1c2UzODQiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9InRleHRfMTciPgogICAgICAgICAgICA8IS0tIOKIkjAuMSAtLT4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MyIKICAgICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4xLDAsMCwtMC4xLDg1NS41Njc2OCw0NjMuMTU4NDQpIgogICAgICAgICAgICAgICBpZD0iZzM5NyI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTIyMTIiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTM4OSIKICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI4My43ODkwNjIiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzAiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTM5MSIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTQ3LjQxMjExIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTJlIgogICAgICAgICAgICAgICAgIGlkPSJ1c2UzOTMiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjE3OS4xOTkyMiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMSIKICAgICAgICAgICAgICAgICBpZD0idXNlMzk1IgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9Inh0aWNrXzExIj4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzM1Ij4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI3A2MDk0N2Y1YTljKSIKICAgICAgICAgICAgICAgZD0iTSA5MzUuMzQ1NDYsNDQ4LjU2IFYgNjAuNDgiCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZGY2ZTMiCiAgICAgICAgICAgICAgIGlkPSJwYXRoNDAxIiAvPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfMzYiPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBpZD0iZzQwNiI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODM7c3Ryb2tlOiM2NTdiODM7c3Ryb2tlLXdpZHRoOjAuOCIKICAgICAgICAgICAgICAgICB4PSI5MzUuMzQ1NDYiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI20zZmI0NzcwMzI1IgogICAgICAgICAgICAgICAgIHk9IjQ0OC41NiIKICAgICAgICAgICAgICAgICBpZD0idXNlNDA0IgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJ0ZXh0XzE4Ij4KICAgICAgICAgICAgPCEtLSAwLjAgLS0+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODMiCiAgICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMSwwLDAsLTAuMSw5MjcuMzkzODksNDYzLjE1ODQ0KSIKICAgICAgICAgICAgICAgaWQ9Imc0MTUiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlNDA5IgogICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjYzLjYyMzA0NyIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0yZSIKICAgICAgICAgICAgICAgICBpZD0idXNlNDExIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI5NS40MTAxNTYiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzAiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTQxMyIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJ4dGlja18xMiI+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF8zNyI+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwNjA5NDdmNWE5YykiCiAgICAgICAgICAgICAgIGQ9Ik0gMTAwMi45ODE4LDQ0OC41NiBWIDYwLjQ4IgogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmRmNmUzIgogICAgICAgICAgICAgICBpZD0icGF0aDQxOSIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzM4Ij4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgaWQ9Imc0MjQiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzO3N0cm9rZTojNjU3YjgzO3N0cm9rZS13aWR0aDowLjgiCiAgICAgICAgICAgICAgICAgeD0iMTAwMi45ODE4IgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNtM2ZiNDc3MDMyNSIKICAgICAgICAgICAgICAgICB5PSI0NDguNTYiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTQyMiIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0idGV4dF8xOSI+CiAgICAgICAgICAgIDwhLS0gMC4xIC0tPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjEsMCwwLC0wLjEsOTk1LjAzMDI2LDQ2My4xNTg0NCkiCiAgICAgICAgICAgICAgIGlkPSJnNDMzIj4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzAiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTQyNyIKICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI2My42MjMwNDciCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMmUiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTQyOSIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iOTUuNDEwMTU2IgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTMxIgogICAgICAgICAgICAgICAgIGlkPSJ1c2U0MzEiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9Im1hdHBsb3RsaWIuYXhpc180Ij4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJ5dGlja184Ij4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzM5Ij4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI3A2MDk0N2Y1YTljKSIKICAgICAgICAgICAgICAgZD0iTSA2MzAuOTgxODIsNDQ4LjU2IEggMTAzNi44IgogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmRmNmUzIgogICAgICAgICAgICAgICBpZD0icGF0aDQzOCIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzQwIj4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgaWQ9Imc0NDMiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzO3N0cm9rZTojNjU3YjgzO3N0cm9rZS13aWR0aDowLjgiCiAgICAgICAgICAgICAgICAgeD0iNjMwLjk4MTgxIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNtZGExNmQyOGY0MSIKICAgICAgICAgICAgICAgICB5PSI0NDguNTYiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTQ0MSIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0idGV4dF8yMCI+CiAgICAgICAgICAgIDwhLS0g4oiSMC40IC0tPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjEsMCwwLC0wLjEsNTk5LjY5OTAxLDQ1Mi4zNTkyMikiCiAgICAgICAgICAgICAgIGlkPSJnNDU0Ij4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMjIxMiIKICAgICAgICAgICAgICAgICBpZD0idXNlNDQ2IgogICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjgzLjc4OTA2MiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlNDQ4IgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSIxNDcuNDEyMTEiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMmUiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTQ1MCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTc5LjE5OTIyIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTM0IgogICAgICAgICAgICAgICAgIGlkPSJ1c2U0NTIiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0ieXRpY2tfOSI+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF80MSI+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwNjA5NDdmNWE5YykiCiAgICAgICAgICAgICAgIGQ9Ik0gNjMwLjk4MTgyLDM4My44OCBIIDEwMzYuOCIKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZkZjZlMyIKICAgICAgICAgICAgICAgaWQ9InBhdGg0NTgiIC8+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF80MiI+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIGlkPSJnNDYzIj4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MztzdHJva2U6IzY1N2I4MztzdHJva2Utd2lkdGg6MC44IgogICAgICAgICAgICAgICAgIHg9IjYzMC45ODE4MSIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjbWRhMTZkMjhmNDEiCiAgICAgICAgICAgICAgICAgeT0iMzgzLjg4IgogICAgICAgICAgICAgICAgIGlkPSJ1c2U0NjEiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9InRleHRfMjEiPgogICAgICAgICAgICA8IS0tIOKIkjAuMyAtLT4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MyIKICAgICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4xLDAsMCwtMC4xLDU5OS42OTkwMSwzODcuNjc5MjIpIgogICAgICAgICAgICAgICBpZD0iZzQ3NCI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTIyMTIiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTQ2NiIKICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI4My43ODkwNjIiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzAiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTQ2OCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTQ3LjQxMjExIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTJlIgogICAgICAgICAgICAgICAgIGlkPSJ1c2U0NzAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjE3OS4xOTkyMiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMyIKICAgICAgICAgICAgICAgICBpZD0idXNlNDcyIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9Inl0aWNrXzEwIj4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzQzIj4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI3A2MDk0N2Y1YTljKSIKICAgICAgICAgICAgICAgZD0iTSA2MzAuOTgxODIsMzE5LjIgSCAxMDM2LjgiCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZGY2ZTMiCiAgICAgICAgICAgICAgIGlkPSJwYXRoNDc4IiAvPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfNDQiPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBpZD0iZzQ4MyI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODM7c3Ryb2tlOiM2NTdiODM7c3Ryb2tlLXdpZHRoOjAuOCIKICAgICAgICAgICAgICAgICB4PSI2MzAuOTgxODEiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI21kYTE2ZDI4ZjQxIgogICAgICAgICAgICAgICAgIHk9IjMxOS4yMDAwMSIKICAgICAgICAgICAgICAgICBpZD0idXNlNDgxIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJ0ZXh0XzIyIj4KICAgICAgICAgICAgPCEtLSDiiJIwLjIgLS0+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODMiCiAgICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMSwwLDAsLTAuMSw1OTkuNjk5MDEsMzIyLjk5OTIyKSIKICAgICAgICAgICAgICAgaWQ9Imc0OTQiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0yMjEyIgogICAgICAgICAgICAgICAgIGlkPSJ1c2U0ODYiCiAgICAgICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iODMuNzg5MDYyIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTMwIgogICAgICAgICAgICAgICAgIGlkPSJ1c2U0ODgiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjE0Ny40MTIxMSIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0yZSIKICAgICAgICAgICAgICAgICBpZD0idXNlNDkwIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSIxNzkuMTk5MjIiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzIiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTQ5MiIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJ5dGlja18xMSI+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF80NSI+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwNjA5NDdmNWE5YykiCiAgICAgICAgICAgICAgIGQ9Ik0gNjMwLjk4MTgyLDI1NC41MiBIIDEwMzYuOCIKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZkZjZlMyIKICAgICAgICAgICAgICAgaWQ9InBhdGg0OTgiIC8+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF80NiI+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIGlkPSJnNTAzIj4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MztzdHJva2U6IzY1N2I4MztzdHJva2Utd2lkdGg6MC44IgogICAgICAgICAgICAgICAgIHg9IjYzMC45ODE4MSIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjbWRhMTZkMjhmNDEiCiAgICAgICAgICAgICAgICAgeT0iMjU0LjUyIgogICAgICAgICAgICAgICAgIGlkPSJ1c2U1MDEiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9InRleHRfMjMiPgogICAgICAgICAgICA8IS0tIOKIkjAuMSAtLT4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzY1N2I4MyIKICAgICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4xLDAsMCwtMC4xLDU5OS42OTkwMSwyNTguMzE5MjIpIgogICAgICAgICAgICAgICBpZD0iZzUxNCI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTIyMTIiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTUwNiIKICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI4My43ODkwNjIiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzAiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTUwOCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iMTQ3LjQxMjExIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTJlIgogICAgICAgICAgICAgICAgIGlkPSJ1c2U1MTAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjE3OS4xOTkyMiIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMSIKICAgICAgICAgICAgICAgICBpZD0idXNlNTEyIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9Inl0aWNrXzEyIj4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzQ3Ij4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI3A2MDk0N2Y1YTljKSIKICAgICAgICAgICAgICAgZD0iTSA2MzAuOTgxODIsMTg5Ljg0IEggMTAzNi44IgogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmRmNmUzIgogICAgICAgICAgICAgICBpZD0icGF0aDUxOCIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzQ4Ij4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgaWQ9Imc1MjMiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzO3N0cm9rZTojNjU3YjgzO3N0cm9rZS13aWR0aDowLjgiCiAgICAgICAgICAgICAgICAgeD0iNjMwLjk4MTgxIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNtZGExNmQyOGY0MSIKICAgICAgICAgICAgICAgICB5PSIxODkuODQiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTUyMSIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0idGV4dF8yNCI+CiAgICAgICAgICAgIDwhLS0gMC4wIC0tPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzIgogICAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjEsMCwwLC0wLjEsNjA4LjA3ODY5LDE5My42MzkyMikiCiAgICAgICAgICAgICAgIGlkPSJnNTMyIj4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzAiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTUyNiIKICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI2My42MjMwNDciCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMmUiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTUyOCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgICA8dXNlCiAgICAgICAgICAgICAgICAgeD0iOTUuNDEwMTU2IgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTMwIgogICAgICAgICAgICAgICAgIGlkPSJ1c2U1MzAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0ieXRpY2tfMTMiPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfNDkiPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjcDYwOTQ3ZjVhOWMpIgogICAgICAgICAgICAgICBkPSJNIDYzMC45ODE4MiwxMjUuMTYgSCAxMDM2LjgiCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZGY2ZTMiCiAgICAgICAgICAgICAgIGlkPSJwYXRoNTM2IiAvPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJsaW5lMmRfNTAiPgogICAgICAgICAgICA8ZwogICAgICAgICAgICAgICBpZD0iZzU0MSI+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODM7c3Ryb2tlOiM2NTdiODM7c3Ryb2tlLXdpZHRoOjAuOCIKICAgICAgICAgICAgICAgICB4PSI2MzAuOTgxODEiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI21kYTE2ZDI4ZjQxIgogICAgICAgICAgICAgICAgIHk9IjEyNS4xNiIKICAgICAgICAgICAgICAgICBpZD0idXNlNTM5IgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJ0ZXh0XzI1Ij4KICAgICAgICAgICAgPCEtLSAwLjEgLS0+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODMiCiAgICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMSwwLDAsLTAuMSw2MDguMDc4NjksMTI4Ljk1OTIyKSIKICAgICAgICAgICAgICAgaWQ9Imc1NTAiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlNTQ0IgogICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjYzLjYyMzA0NyIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0yZSIKICAgICAgICAgICAgICAgICBpZD0idXNlNTQ2IgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI5NS40MTAxNTYiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzEiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTU0OCIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJ5dGlja18xNCI+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImxpbmUyZF81MSI+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwNjA5NDdmNWE5YykiCiAgICAgICAgICAgICAgIGQ9Ik0gNjMwLjk4MTgyLDYwLjQ4IEggMTAzNi44IgogICAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmRmNmUzIgogICAgICAgICAgICAgICBpZD0icGF0aDU1NCIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxnCiAgICAgICAgICAgICBpZD0ibGluZTJkXzUyIj4KICAgICAgICAgICAgPGcKICAgICAgICAgICAgICAgaWQ9Imc1NTkiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICBzdHlsZT0iZmlsbDojNjU3YjgzO3N0cm9rZTojNjU3YjgzO3N0cm9rZS13aWR0aDowLjgiCiAgICAgICAgICAgICAgICAgeD0iNjMwLjk4MTgxIgogICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9IiNtZGExNmQyOGY0MSIKICAgICAgICAgICAgICAgICB5PSI2MC40OCIKICAgICAgICAgICAgICAgICBpZD0idXNlNTU3IgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgICAgPGcKICAgICAgICAgICAgIGlkPSJ0ZXh0XzI2Ij4KICAgICAgICAgICAgPCEtLSAwLjIgLS0+CiAgICAgICAgICAgIDxnCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM2NTdiODMiCiAgICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMSwwLDAsLTAuMSw2MDguMDc4NjksNjQuMjc5MjE5KSIKICAgICAgICAgICAgICAgaWQ9Imc1NjgiPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0zMCIKICAgICAgICAgICAgICAgICBpZD0idXNlNTYyIgogICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICAgICAgICAgICAgPHVzZQogICAgICAgICAgICAgICAgIHg9IjYzLjYyMzA0NyIKICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy0yZSIKICAgICAgICAgICAgICAgICBpZD0idXNlNTY0IgogICAgICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICB4PSI5NS40MTAxNTYiCiAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtMzIiCiAgICAgICAgICAgICAgICAgaWQ9InVzZTU2NiIKICAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICBpZD0iTGluZUNvbGxlY3Rpb25fNyI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjcDYwOTQ3ZjVhOWMpIgogICAgICAgICAgIGQ9Im0gOTI3LjgyMjc3LDIzMC4xNTU2MSAtMy4yNTMwNSwtMC42ODEzNyAtMy4yNTMwNSwtMC45NDEwOCAtMi40Mzk3OSwtMC44ODkzMiAtMy4yNTMwNSwtMS40NTE5NSAtMi40Mzk3OSwtMS4zMTAzNSAtMi40Mzk3OSwtMS41MjE4NSAtMi42MDM1OSwtMS44OTI2IC0yLjI3NTk4LC0xLjkyNDYzIC0yLjAyMjgsLTEuOTYzOTQgLTIuMDg1MDMsLTIuMzMzMTUgLTEuNzkxOTMsLTIuMzMzMTUgLTEuNTQ2MzgsLTIuMzMzMTQgLTEuNDk5NzYsLTIuNjY0NDUgLTEuMjk3ODQsLTIuNzc5NTYgLTEuMTYxNDEsLTMuMTEwODYgLTAuODc0NDMsLTMuMTEwODYgLTAuNjA3NjYsLTMuMTEwODcgLTAuMzUxODMsLTMuMTEwODYgLTAuMTAyNzgsLTMuMTEwODYgMC4xNDM4OSwtMy4xMTA4NiAwLjM5NDUzLC0zLjExMDg2IDAuNjUwNDYsLTMuMTEwODYgMC45MjE4LC0zLjExMDg3IDEuMjA5ODYsLTMuMTEwODYgMS4xMTA4MiwtMi4zMzMxNCAxLjU5MTEyLC0yLjc5NTg1IDEuNjI2NTIsLTIuNDE2OTYgMS42MjY1MywtMi4wOTM3MiAxLjc5NTE3LC0yLjAyNjA2IDIuMzkxMzgsLTIuMzMzMTQgMi4zMTk1NSwtMS45NDIwMyAyLjcxMTg1LC0xLjk0NjU1IDIuNTQzNzcsLTEuNTU1NDMgMi44NzcwMSwtMS40ODg0MiAyLjQzOTc5LC0xLjA1Nzg0IDMuMjUzMDUsLTEuMTUwNTkgMy4yNTMwNSwtMC44NzU4MyAzLjI1MzA2LC0wLjYxNjk4IDMuMjUzMDUsLTAuMzcyODIgMy4yNTMwNSwtMC4xMzI0OCAzLjI1MzA1LDAuMTAzMDQgMy4yNTMwNSwwLjM0MjI1IDMuMjUzMDUsMC41ODUxOSAzLjI1MzA2LDAuODQyNzggMy4yNTMwNSwxLjExNjE4IDIuNzAwODksMS4xNTAwOSAzLjAyNTcxLDEuNTU1NDMgMi41NDE3MywxLjU1NTQzIDIuMzA0MDgsMS42MzIyOSAyLjcyNTA0LDIuMjU2MjkgMi4zOTIwOSwyLjMzMzE0IDIuMjAyMjQsMi41MjMzNSAxLjYyNjUzLDIuMTY0MTMgMS42MjY1MiwyLjUxNjI0IDEuNTc1NzEsMi45MDY1OCAxLjA1MDY0LDIuMzMzMTUgMS4xMzQ1OSwzLjExMDg2IDAuODUyMjgsMy4xMTA4NiAwLjU4NjE4LDMuMTEwODYgMC4zMzIwNSwzLjExMDg2IDAuMDgzLDMuMTEwODcgLTAuMTY2MDIsMy4xMTA4NiAtMC40MTUwNiwzLjExMDg2IC0wLjY3NDA2LDMuMTEwODYgLTAuOTQzNjUsMy4xMTA4NiAtMC45NzU4OCwyLjUxODE3IC0xLjM5MTkxLDIuOTI1ODQgLTEuMzI4NTksMi4zMzMxNSAtMS41NDU0OSwyLjMzMzE0IC0xLjc5MzkzLDIuMzMzMTUgLTIuMDgwNTUsMi4zMzMxNSAtMi40MzQ2OSwyLjMzMzE0IC0yLjQzNzA1LDEuOTk1NTcgLTIuNzAyNTksMS44OTMwMSAtMi42MTE4MiwxLjU1NTQzIC0yLjgxODIyLDEuNDE3NDQgLTIuNDM5NzgsMS4wMjk4MyAtMy4yNTMwNSwxLjExMzkxIC0zLjI1MzA2LDAuODQyMzggLTMuMjUzMDUsMC41ODY0NiAtMy4yNTMwNSwwLjM0Mjg5IC0zLjI1MzA1LDAuMTA0MzYgLTMuMjUzMDUsLTAuMTM0MTggLTMuMjUzMDUsLTAuMzcyNyAtMC44MTMyNywtMC4xMzA0NSB2IDAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzQ0MDE1NDtzdHJva2Utd2lkdGg6MiIKICAgICAgICAgICBpZD0icGF0aDU3MyIgLz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICBpZD0iTGluZUNvbGxlY3Rpb25fOCI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjcDYwOTQ3ZjVhOWMpIgogICAgICAgICAgIGQ9Im0gOTI4LjYzNjA0LDI1MC4yNDM5OCAtNC4wNjYzMiwtMC41NDE2OSAtNC4wNjYzMSwtMC44MDA5OCAtMy43OTQzNywtMC45OTE4OSAtMy41MjUsLTEuMTQzOCAtMy4yNTMwNSwtMS4yNTYwOSAtMy4zMDM2OSwtMS40ODg2OSAtMy4yMDI0MSwtMS42NjQ3NCAtMy4yNTMwNiwtMS45MzY3MSAtMy4yNTMwNSwtMi4yMTI5NSAtMi41NjIyNiwtMS45NjI3NSAtMy4xMzA1OCwtMi43MDUwMyAtMi43ODU2NCwtMi43Mzg5OCAtMi4xMTgxNiwtMi4zMzMxNSAtMi41MDc3NSwtMy4xMTA4NiAtMi4zNDc2LC0zLjM0NDMxIC0xLjc2NjIyLC0yLjg3NzQxIC0xLjY3MDQ4LC0zLjExMDg2IC0xLjQ0NDQ3LC0zLjExMDg3IC0xLjIzMTM2LC0zLjExMDg2IC0xLjIwNjg0LC0zLjY5MDQ0IC0wLjg1ODkyLC0zLjMwOSAtMC43Njc2LC00LjAwMDUyIC0wLjQ2MjYxLC0zLjc3NjYzIC0wLjIxNzkxLC0zLjg4ODU4IDAuMDQzNiwtMy44ODg1OCAwLjMwNTA4LC0zLjg4ODU3IDAuNTY5NjQsLTMuODg4NTggMC44NDIzNSwtMy44ODg1OCAwLjg3NzU4LC0zLjExMDg2IDEuMjk1MzQsLTMuNzExNTcgMS4wMzgzNCwtMi41MTAxNSAxLjQ3OTQ2LC0zLjExMDg2IDEuNzEwODUsLTMuMTEwODYgMS45NjMzNywtMy4xMTA4NyAyLjI0NDQxLC0zLjExMDg2IDIuNTY1MDYsLTMuMTEwODYgMi4xNjUxMSwtMi4zMzMxNSAyLjQwNjgsLTIuMzMzMTQgMy4xMzE2NCwtMi42OTAyOCAzLjI1MzA2LC0yLjQ0NjA2IDMuMjUzMDUsLTIuMTQwNDMgMy41OTgyNiwtMi4wNTU4MiAzLjE0MTM1LC0xLjU1NTQzIDMuNjU4MDUsLTEuNTU1NDMgMy40Mjc4MSwtMS4yMjYwMSAzLjc2Njc3LC0xLjEwNzE0IDMuNTUyNTksLTAuODI2MzkgNC4wNjYzMiwtMC42OTU5IDQuMDY2MzEsLTAuNDM3NTggNC4wNjYzMiwtMC4xODczNSA0LjA2NjMxLDAuMDYyNCA0LjA2NjMxLDAuMzEyMjYgNC4wNjYzMiwwLjU2NjU0IDQuMDY2MzEsMC44Mjc2MiA0LjA2NjMyLDEuMDk5MTYgMy4yNTMwNSwxLjA4NzU5IDMuMzAyODgsMS4zMDI0NyAzLjM3NDY4LDEuNTU1NDMgMy4wODE1OSwxLjYzMzI4IDMuMjUzMDYsMS45Njk2OSAzLjI1MzA1LDIuMjUwMTEgMi40NzUxMSwxLjkyNDA3IDMuMjE3NzMsMi44MjQ0OSAyLjYyNTYxLDIuNjE5NTIgMi43NDM4MiwzLjExMDg2IDIuMzk4OTgsMy4xMTA4NiAyLjEwMDMsMy4xMTA4NiAxLjgzMjc5LDMuMTEwODcgMS41OTI5MywzLjExMDg2IDEuMzcyNzEsMy4xMTA4NiAxLjE2NDI5LDMuMTEwODYgMC45NzEyNCwzLjExMDg2IDAuNzg1NzcsMy4xMTA4NiAwLjczMjA5LDMuODg4NTggMC40NjM5NCwzLjg4ODU4IDAuMTk5MjEsMy44ODg1OCAtMC4wNjA2LDMuODg4NTcgLTAuMzIxNzgsMy44ODg1OCAtMC41ODc4LDMuODg4NTggLTAuNjY2NzksMy4xMTA4NiAtMC44NDY2MiwzLjExMDg2IC0xLjA0ODA3LDMuMTQ5NzggLTEuMjE5NjksMy4wNzE5NCAtMS40NDMyMywzLjExMDg3IC0xLjY3MDc5LDMuMTEwODYgLTEuOTE4OTksMy4xMTA4NiAtMi4xOTUyNSwzLjExMDg2IC0yLjUwODM2LDMuMTEwODYgLTIuMTE1NDIsMi4zMzMxNSAtMi4zODAyNiwyLjM2MTY2IC0yLjU5MzU3LDIuMzA0NjMgLTMuMDk5MjcsMi40NDMzNSAtMy4yNTMwNSwyLjI1MDUgLTMuMjUzMDYsMS45Njc2IC0zLjYxMTIxLDEuODkzNDIgLTMuNDYzNzEsMS41NTU0MyAtMy40OTc0OSwxLjMzMjg1IC0zLjI1MzA2LDEuMDQwNTcgLTQuMDY2MzEsMS4wNDM1MiAtNC4wNjYzMSwwLjc3NDU5IC00LjA2NjMyLDAuNTE1OTggLTQuMDY2MzEsMC4yNjExNyAtNC4wNjYzMiwwLjAxMjQgLTQuMDY2MzEsLTAuMjM2MyAtMC44MTMyNiwtMC4wNzcxIHYgMCIKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMzM2MjhkO3N0cm9rZS13aWR0aDoyIgogICAgICAgICAgIGlkPSJwYXRoNTc2IiAvPgogICAgICA8L2c+CiAgICAgIDxnCiAgICAgICAgIGlkPSJMaW5lQ29sbGVjdGlvbl85Ij4KICAgICAgICA8cGF0aAogICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwNjA5NDdmNWE5YykiCiAgICAgICAgICAgZD0ibSA5MzAuMjYyNTYsMjc5LjgwNjM2IC00Ljg3OTU4LC0wLjM3NDcgLTQuODc5NTcsLTAuNjE5NjggLTQuODc5NTgsLTAuODcxMTcgLTQuODc5NTgsLTEuMTI5MzcgLTQuMDY2MzEsLTEuMTQ2NjMgLTQuMDY2MzIsLTEuMzQwMDIgLTQuMDY2MzEsLTEuNTQ0MzQgLTQuMDY2MzIsLTEuNzYwNDMgLTQuMzAyMTYsLTIuMTEyMjkgLTQuMjA0MiwtMi4zMzMxNCAtMy43NjI2OSwtMi4zMzMxNSAtMy45OTYyLC0yLjc1OTk2IC0zLjUwNDIxLC0yLjY4NDA1IC0zLjY3MDU5LC0zLjExMDg2IC0zLjMxNTczLC0zLjExMDg2IC0zLjAwOTk2LC0zLjExMDg2IC0yLjc2NDc3LC0zLjEzNTEgLTMuMDc1OTUsLTMuODY0MzQgLTIuNjE2ODksLTMuNjY0ODkgLTIuNDM5NzksLTMuODA4MDcgLTEuOTY2MjIsLTMuNDE1MDYgLTIuMTAwMDksLTQuMDkwMzggLTEuNjcwNTcsLTMuNjg2NzcgLTEuNTgyNDksLTMuOTg3MDQgLTEuNTQzMzEsLTQuNTY3ODMgLTEuMDk2NjQsLTMuODg4NTggLTEuMDYzNTMsLTQuNjY2MjkgLTAuNzk2OTMsLTQuNjY2MjkgLTAuNTM3MjYsLTQuNjY2MjkgLTAuMjgxMDQsLTQuNjY2MyAtMC4wMjgxLC00LjY2NjI5IDAuMjI0ODMsLTQuNjY2MjkgMC40Nzk4MiwtNC42NjYzIDAuNzM4NDksLTQuNjY2MjkgMS4wMDQwNSwtNC42NjYyOSAxLjA0NTA2LC0zLjg4ODU4IDEuMjQxOTgsLTMuODg4NTcgMS40NDY1OSwtMy44ODg1OCAxLjY2MjgxLC0zLjg4ODU4IDEuODkxNTMsLTMuODg4NTggMi4xMzM4OSwtMy44ODg1NyAyLjQyMzY2LC0zLjkyNzM4IDIuNjYxNTEsLTMuODQ5NzggMy4wMDQ3MiwtMy44ODg1NyAyLjY2MTc4LC0zLjExMDg3IDMuMDU3NjcsLTMuMjUyOTQgMy4yNTMwNSwtMy4xMzgxIDMuMzYxMjksLTIuOTQxNTQgMy45NTgwNywtMy4xMjIxNyA0LjA2NjMyLC0yLjg2Nzg5IDQuMDY2MzEsLTIuNTY0ODIgNC4xNTAxOCwtMi4zMzMxNCAzLjk4MjQ1LC0xLjk5MjM2IDQuMjg3MDEsLTEuODk2MjEgNC4wMTE5MSwtMS41NTU0MyA0LjcxMzI5LC0xLjU3Mjk5IDQuODc5NTcsLTEuMzUyNDQgNC44Nzk1OCwtMS4wODYxNCA0Ljg3OTU4LC0wLjgyODU3IDQuODc5NTgsLTAuNTc5MDUgNC44Nzk1NywtMC4zMzI1NjEgNC44Nzk1OCwtMC4wOTA2NCA0Ljg3OTU4LDAuMTUxMDY3IDQuODc5NTgsMC4zOTQwNDQgNC44Nzk1NywwLjY0MDA4IDQuODc5NTgsMC44OTI2OCA0Ljg3OTU4LDEuMTUyMDMgNC4wNjYzMSwxLjE2NTAzIDQuMzA2MjEsMS40NDc0NiA0LjAxMjU0LDEuNTU1NDMgMy44ODAyLDEuNzA1MjIgNC4zODgwMiwyLjE4MzM1IDQuMTQ5NTksMi4zMzMxNSAzLjcxOTY1LDIuMzMzMTUgNC4wMDc5OSwyLjc5ODkxIDMuNDE4NzgsMi42NDUwOSAzLjYzODA3LDMuMTEwODYgMy4yODg0NSwzLjExMDg3IDIuOTg2OSwzLjExMDg2IDIuOTMzMSwzLjM2MzQ3IDIuODYzMywzLjYzNTk3IDIuNzQ4LDMuODg4NTcgMi40NTM3LDMuODg4NTggMi4xODUxLDMuODg4NTggMS45NDg4LDMuOTA5MzEgMS42OTczLDMuODY3ODQgMS41NTU4LDQuMDc2ODIgMS40NDgsNC40NzgwNSAxLjA0NTYsMy44ODg1OCAxLjAwMzIsNC42NjYyOSAwLjczODgsNC42NjYyOSAwLjQ3OTksNC42NjYzIDAuMjI1Myw0LjY2NjI5IC0wLjAyOCw0LjY2NjI5IC0wLjI4Miw0LjY2NjMgLTAuNTM2Myw0LjY2NjI5IC0wLjY0NjMsMy44ODg1OCAtMS4wMDg1LDQuNjI2NyAtMS4wNjg1LDMuOTI4MTYgLTEuMzcxMiw0LjIxODE4IC0xLjYyNjYsNC4yNDkxMSAtMS42MjY1LDMuNjk0NSAtMS42NzU3LDMuMzkyNTIgLTIuMzkwNiw0LjI5MjE5IC0yLjQzOTgsMy44ODAxIC0yLjQ0NDEsMy40OTM0NCAtMy4wMjg5LDMuODg4NTggLTIuNjgwNiwzLjExMDg2IC0zLjIzMjEsMy40MDI3MiAtMy4yNTMsMy4xMDAwNyAtMy4yNjY1OCwyLjgyOTggLTMuOTgwNTEsMy4xMTA4NiAtMy4zMjUzNiwyLjM0ODE0IC00LjA2NjMxLDIuNTkyMTUgLTQuMDY2MzIsMi4zMTU0MSAtNC4wOTY3LDIuMDc2ODkgLTQuMDM1OTMsMS44MTE4MyAtNC4wNjYzMSwxLjYwNzYxIC00LjA2NjMxLDEuNDAwOTkgLTQuODc5NTgsMS40MjIxIC00Ljg3OTU4LDEuMTUwOTMgLTQuODc5NTgsMC44OTIzNCAtNC44Nzk1NywwLjY0MDQ5IC00Ljg3OTU4LDAuMzk1MDUgLTQuODc5NTgsMC4xNTA3MyAtNC44Nzk1OCwtMC4wOTA0IC0wLjgxMzI2LC0wLjAzODUgdiAwIgogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZGU3MjU7c3Ryb2tlLXdpZHRoOjIiCiAgICAgICAgICAgaWQ9InBhdGg1NzkiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9IkxpbmVDb2xsZWN0aW9uXzEwIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwNjA5NDdmNWE5YykiCiAgICAgICAgICAgZD0ibSA3NDguMDkxNjcsMzMzLjQ2NDcyIC0yLjQzOTc4LC0wLjE3MjU3IC0zLjI1MzA2LC0wLjQ4ODMxIC0yLjQzOTc5LC0wLjU2NDczIC0yLjQzOTc4LC0wLjczODQzIC0yLjk5MzUxLC0xLjE1MzQyIC0xLjg4NjA3LC0wLjg2OTgyIC0yLjcxMzg1LC0xLjQ2MzMzIC0yLjQ2ODYzLC0xLjU1NTQzIC0yLjE2OTI5LC0xLjU1NTQzIC0yLjgzNzQ5LC0yLjMzMzE1IC0yLjQ3Mzg2LC0yLjMzMzE1IC0yLjE5Mzg5LC0yLjMzMzE0IC0yLjIyMTUxLC0yLjY1MDkyIC0yLjQzOTc5LC0zLjMwMzQ2IC0yLjE4NDk1LC0zLjM3ODIxIC0xLjg4MTM2LC0zLjI5Njk3IC0xLjg1NDI3LC0zLjcwMjQ3IC0xLjY5MjM3LC0zLjg4ODU3IC0xLjQ1OTk5LC0zLjg4ODU4IC0xLjQ3NDI5LC00LjY2NjI5IC0xLjAxNDczLC0zLjg4ODU4IC0wLjk4MTY0LC00LjY2NjI5IC0wLjczODQyLC00LjY2NjMgLTAuNTA2MzUsLTQuNjY2MjkgLTAuMjc3OTksLTQuNjY2MjkgLTAuMDU2NiwtNC42NjYyOSAwLjE2NDIsLTQuNjY2MyAwLjM4OTExLC00LjY2NjI5IDAuNjE2NjgsLTQuNjY2MjkgMC44NTU3OCwtNC42NjYyOSAxLjEwNzI0LC00LjY2NjMgMS4yMzA3OCwtNC4yMjExOCAxLjUxMjU5LC00LjMzMzY5IDEuNTkyODMsLTMuODg4NTcgMS44NDE0NiwtMy44ODg1OCAyLjEyNzk0LC0zLjg4ODU4IDEuOTM4MDcsLTMuMTEwODYgMi4zNzI4LC0zLjM1NTUxIDIuNDM5NzgsLTMuMDI0MzIgMi43MzAwMSwtMi45NTI3NSAyLjQ2NTkxLC0yLjMzMzE1IDIuMTIzNDUsLTEuNzg0NTkgMi44NjMyMSwtMi4xMDM5OSAyLjQ1NTQxLC0xLjU1NTQzIDIuODE0MDEsLTEuNTIyNjggMi40Mzk3OSwtMS4xMDQ3MyAyLjQzOTc5LC0wLjkxODI0IDIuNDM5NzgsLTAuNzM4MzkgMi40Mzk3OSwtMC41NjQ1NSAzLjI1MzA2LC0wLjQ4ODcyIDIuNDM5NzgsLTAuMTcyMDcgMy4yNTMwNiwwLjAyNzYgMi40Mzk3OCwwLjIxNDMgMy4yNTMwNiwwLjU0NDYyIDIuNDM5NzgsMC42MDgzNiAzLjAzNzk1LDEuMDAzNiAyLjY1NDksMS4xMDc4NCAyLjQ1MjA3LDEuMjI1MzEgMi42NDQ3MywxLjU1NTQzIDIuMjk1OTIsMS41NTU0MyAyLjM2NjQzLDEuODIzMjIgMi40Mzk3OSwyLjEzMjc3IDIuNDM5NzksMi40MjA5NCAyLjYxMjQ1LDIuOTU1NjUgMi40MDc4MiwzLjExMDg2IDIuMjk5MDksMy4zODc1MyAyLjE0MjcsMy42MTE5MSAxLjkyMzYyLDMuNzExMSAxLjYyNjUyLDMuNTk1MDcgMS42MjY1Myw0LjE2MDE4IDEuMzU2MSw0LjA4Nzk2IDEuMDg5NSwzLjg4ODU4IDEuMDYxOTMsNC42NjYyOSAwLjgxNTA5LDQuNjY2MjkgMC41ODAyMyw0LjY2NjMgMC4zNDk1Niw0LjY2NjI5IDAuMTI3OTEsNC42NjYyOSAtMC4wOTM4LDQuNjY2MjkgLTAuMzE1NDIsNC42NjYzIC0wLjU0NDQxLDQuNjY2MjkgLTAuNzc4MDgsNC42NjYyOSAtMS4wMjM2NSw0LjY2NjI5IC0xLjA1MjI0LDMuODg4NTggLTEuNTIyMTIsNC42NjYyOSAtMS41MDQ3NSwzLjg4ODU4IC0xLjc0MTY4LDMuODg4NTggLTEuNjgzNzgsMy4yOTA0NyAtMi4xNjI1MywzLjcwODk3IC0yLjA2MjgzLDMuMTEwODYgLTIuMzM1NjcsMy4xMTA4NiAtMi42NzMzNiwzLjExMDg2IC0yLjI3ODQ2LDIuMzMzMTUgLTIuNTg1MjcsMi4zMzMxNSAtMi4xNjcxNCwxLjcyODgxIC0yLjQzOTc5LDEuNzE2NTkgLTIuNDM5NzgsMS40OTQxMiAtMi40Mzk3OSwxLjI4NzE2IC0yLjQzOTc5LDEuMDg5MDggLTIuNDM5NzksMC45MDM0NiAtMi40Mzk3OSwwLjcyNDEgLTIuNDM5NzksMC41NTA3MyAtMy4yNTMwNSwwLjQ3MDQyIC0zLjI1MzA1LDAuMTc1MDkgLTEuNjI2NTMsLTAuMDIyNyB2IDAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzQ0MDE1NDtzdHJva2Utd2lkdGg6MiIKICAgICAgICAgICBpZD0icGF0aDU4MiIgLz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICBpZD0iTGluZUNvbGxlY3Rpb25fMTEiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI3A2MDk0N2Y1YTljKSIKICAgICAgICAgICBkPSJtIDc0My4yMTIxLDM2Ni4xOTY0MSAtMy4yNTMwNiwtMC40ODMzIC0zLjI1MzA1LC0wLjY4NzQzIC0zLjI1MzA1LC0wLjg5NjI3IC0zLjI3NDM2LC0xLjExODExIC0zLjc0MjExLC0xLjU1NTQzIC0zLjE2Nzc2LC0xLjU1NTQzIC0yLjgyNzk3LC0xLjU4MTg2IC0zLjYxMTU4LC0yLjMwNjcyIC0zLjIwOTc1LC0yLjMzMzE0IC0yLjkzNzgzLC0yLjM4NzUgLTMuMzU5NjYsLTMuMDU2NTEgLTMuMTQ2NDQsLTMuMjA3NzUgLTIuNjY3MjEsLTMuMDEzOTcgLTMuMDI1NjMsLTMuNzg1MjYgLTIuNDM5NzksLTMuMzc5NDYgLTIuNDQ0MjksLTMuNzIzMyAtMi40MzUyOSwtNC4xMDY3OCAtMi40Mzk3OSwtNC41OTE1MyAtMi4xNDIxNywtNC41MjI4NSAtMS45Njg2MSwtNC42NjYzIC0xLjc0MTY4LC00LjY2NjI5IC0xLjc3MDE3LC01LjQ0NDAxIC0xLjUwODk1LC01LjQ0NCAtMS4yNjM1LC01LjQ0NDAxIC0xLjAzMTczLC01LjQ0NDAxIC0wLjgwODczLC01LjQ0NDAxIC0wLjU5MywtNS40NDQwMSAtMC4zODM2MywtNS40NDQgLTAuMTc2NzMsLTUuNDQ0MDEgMC4wMjgyLC01LjQ0NDAxIDAuMjMzMDQsLTUuNDQ0MDEgMC40NDE1MSwtNS40NDQwMSAwLjY1MTc3LC01LjQ0NCAwLjg2OTE5LC01LjQ0NDAxIDEuMDk0MSwtNS40NDQwMSAxLjMyOTIyLC01LjQ0NDAxIDEuNTc4NjUsLTUuNDQ0MDEgMS44NDY1MywtNS40NDQgMS44MTIyNywtNC42NjYzIDIuMDQ0MDksLTQuNjY2MjkgMi4yOTkzLC00LjY2NjI5IDIuNTg3MjgsLTQuNjY2MjkgMi40MDMxOSwtMy44ODg1OCAyLjY2MjQ3LC0zLjg4ODU4IDIuODkzODEsLTMuODA1MjQgMi42OTIzNywtMy4xOTQyIDMuMDAwNDcsLTMuMjIwMjIgMy4yNTMwNiwtMy4xMjcwOCAzLjQ5OTQyLC0yLjk4NTI4IDMuMDc3MywtMi4zMzMxNSAzLjQ4MjM0LC0yLjMzMzE1IDIuOTUzMTQsLTEuNzQzNTkgMy4yNTMwNSwtMS42ODI0NyAzLjI1MzA1LC0xLjQ0NjYzIDMuNjM3LC0xLjM0OTAzIDIuODY5MTEsLTAuODc0NCAzLjI1MzA1LC0wLjc5MTIxIDMuODM5NjUsLTAuNjY3NTMgMi42NjY0NSwtMC4yOTg0OCAzLjI1MzA1LC0wLjE4MDg1IDMuMjUzMDYsMC4wMTg5IDMuMjUzMDUsMC4yMTg2NyAzLjI1MzA1LDAuNDE5NzcgMy4yNTMwNSwwLjYyMzA2IDMuMjUzMDUsMC44MzEwMyAzLjI1MzA1LDEuMDQzODUgMy4yNTMwNSwxLjI2MjA0IDMuMjg0NjIsMS41MDYgMy4yMjE0OSwxLjcxMzM1IDMuNTUwMTQsMi4xNzUyMyAzLjMzMzEzLDIuMzMzMTUgMi45Njg3NSwyLjMzMzE0IDMuMTYwMTgsMi43NzI5MyAzLjI1MzA2LDMuMTk1MzggMy4wNjQzNywzLjM2NDI4IDIuNjI4NDcsMy4xOTIyMiAyLjgzMjc2LDMuODA3MjIgMi42MDc0LDMuODg4NTcgMi4zNTU1NSwzLjg4ODU4IDIuMTM0MzksMy44ODg1OCAyLjMwMDcyLDQuNjY2MjkgMi4wNDMyNiw0LjY2NjI5IDEuODEyODMsNC42NjYzIDEuNTk5MDksNC42NjYyOSAxLjQwMDQ2LDQuNjY2MjkgMS4zOTk1Nyw1LjQ0NDAxIDEuMTU5NjIsNS40NDQwMSAwLjkzMjYxLDUuNDQ0IDAuNzEzMiw1LjQ0NDAxIDAuNTAxMDIsNS40NDQwMSAwLjI5MjM1LDUuNDQ0MDEgMC4wODY5LDUuNDQ0MDEgLTAuMTE4NSw1LjQ0NCAtMC4zMjM5NCw1LjQ0NDAxIC0wLjUzMzY0LDUuNDQ0MDEgLTAuNzQ2NTYsNS40NDQwMSAtMC45NjY3NCw1LjQ0NDAxIC0xLjE5NTA0LDUuNDQ0MDEgLTEuNDM3NTQsNS40NDQgLTEuNDM1ODUsNC42NjYzIC0xLjYzNjIzLDQuNjY2MjkgLTEuOTUyMjYsNC45MDM4OSAtMS45ODg2MSw0LjQyODY5IC0yLjM0ODc3LDQuNjY2MyAtMi4xNzgzMywzLjg4ODU3IC0yLjQzMDE4LDMuOTI0MTEgLTIuNjQzOSwzLjg1MzA1IC0yLjk2NjQ1LDMuODg4NTggLTIuNjI5MDUsMy4xMTA4NiAtMy4xNDYyOCwzLjM2MDg4IC0zLjI1MzA1LDMuMTA1NTUgLTMuMzc1MTEsMi44NjYxNSAtMy4xMzA5OSwyLjM2NTAxIC0zLjQ0OTU2LDIuMzAxMjggLTMuMDU2NTQsMS43OTM0OSAtMy4yNTMwNiwxLjY2Nzg4IC0zLjI1MzA1LDEuNDMyNjMgLTMuNjE3NjYsMS4zMjc3MyAtMi44ODg0NCwwLjg2OTM0IC0zLjI1MzA1LDAuNzc4NTggLTMuMjUzMDUsMC41NzIyMyAtMy4yNTMwNiwwLjM2OTEzIC0zLjI1MzA1LDAuMTY4NjQgLTMuMjUzMDUsLTAuMDMxIC0zLjI1MzA1LC0wLjIzMDY2IC0wLjgxMzI2LC0wLjA4ODggdiAwIgogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMyOTdhOGU7c3Ryb2tlLXdpZHRoOjIiCiAgICAgICAgICAgaWQ9InBhdGg1ODUiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9IkxpbmVDb2xsZWN0aW9uXzEyIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNwNjA5NDdmNWE5YykiCiAgICAgICAgICAgZD0ibSA3NDAuNzcyMzEsNDAwLjM1NDExIC00LjA2NjMyLC0wLjYxODYgLTQuMDY2MzEsLTAuODU4MzIgLTQuMDY2MzIsLTEuMTAzNTMgLTQuMDY2MzEsLTEuMzUzNzkgLTQuMDY2MzEsLTEuNjEyOTMgLTQuMDY2MzIsLTEuODgxMzkgLTQuMDY2MzEsLTIuMTYxMDggLTQuMDY2MzIsLTIuNDU1ODUgLTQuMDMyODUsLTIuNzQzNTcgLTMuMjg2NTEsLTIuNDc4MDUgLTMuNTgxOCwtMi45NjU5NiAtMy40MjMyMSwtMy4xMTA4NiAtMy4xMzkzOSwtMy4xMTA4NiAtMi45MDAzMSwtMy4xMTA4NiAtMy4zMzQ0NCwtMy44ODg1OCAtMy4xMzkxNiwtMy45OTYzOCAtMy4yNzIyNiwtNC41NTg0OSAtMy4yMzM4NSwtNC45NTc5OCAtMi42MDU2MiwtNC4zNzQ2MSAtMi41NTAwOSwtNC42NjYyOSAtMi43MDQ5MiwtNS40NDQwMSAtMi40NDAwMywtNS40NDQgLTIuMTk3NDEsLTUuNDQ0MDEgLTIuMTQwNjYsLTUuOTM0ODYgLTEuODMwNjUsLTUuNzMwODcgLTEuNzQxNTQsLTYuMjIxNzMgLTEuNDk5NTcsLTYuMjIxNzIgLTEuMjY4NDksLTYuMjIxNzIgLTEuMDQ2ODksLTYuMjIxNzMgLTAuODMxODUsLTYuMjIxNzIgLTAuNjIyNjUsLTYuMjIxNzIgLTAuNDE3MDQsLTYuMjIxNzMgLTAuMjE0ODYsLTYuMjIxNzIgLTAuMDEzNSwtNi4yMjE3MiAwLjE4Nzc4LC02LjIyMTczIDAuMzg5NDEsLTYuMjIxNzIgMC41OTUzNCwtNi4yMjE3MyAwLjgwMzUyLC02LjIyMTcyIDEuMDE2NzcsLTYuMjIxNzIgMS4yMzg5MywtNi4yMjE3MyAxLjQ2NzYyLC02LjIyMTcyIDEuNzA4NDQsLTYuMjIxNzIgMS45NjI0LC02LjIyMTczIDEuOTM5OSwtNS40NDQgMi4yNDMyOSwtNS42MzkxMiAyLjQzOTc5LC01LjUwNjk3IDIuNTQyNDEsLTUuMTg1OTQgMi45NTA5OCwtNS40NDQwMSAyLjc4NDIyLC00LjY2NjI5IDMuMTA4MDcsLTQuNzUzMjIgMy4yODk2NywtNC41NzkzNiAzLjIxNjQzLC00LjA4NjQ3IDMuMjUzMDUsLTMuNzg1ODkgMy41NzAyOSwtMy43OTMzOCAzLjIwMDU0LC0zLjExMDg2IDMuODAxNTksLTMuMzY5NDQgMy41NTI4NiwtMi44NTIyOCAzLjc2NjUsLTIuNzM1OTcgNC4wNjYzMiwtMi42NDEyMSAzLjI1MzA1LC0xLjg5MTk5IDQuMDY2MzEsLTIuMTA0NDggNC4wNjYzMiwtMS44MjYwOSA0LjA2NjMxLC0xLjU2MDM3IDQuMDY2MzIsLTEuMzAzOCA0LjA2NjMxLC0xLjA1MzUxIDQuMDY2MzIsLTAuODEwMSA0LjA2NjMxLC0wLjU3MDgzIDQuMDY2MzIsLTAuMzM0MDIgNC4wNjYzMSwtMC4wOTk1IDQuMDY2MzEsMC4xMzUwMiA0LjA2NjMyLDAuMzY5NTQgNC4wNjYzMSwwLjYwNjk1IDQuMDY2MzIsMC44NDY2NSA0LjA2NjMxLDEuMDkxMTQgNC4zMzE4OCwxLjQzOTEyIDMuOTIzMzgsMS41NTU0MyAzLjk0MzY5LDEuODE1MzEgNC4wNjYzMSwyLjE0NjkzIDQuMDY2MzEsMi40NDEzIDQuMDY2MzIsMi43NTI0NSAzLjM0MTIsMi41MDk3NSAzLjc1OTI2LDMuMTEwODYgMy40NzE5NiwzLjE2MTk5IDMuODI0NTYsMy44Mzc0NSAyLjg0MDcyLDMuMTEwODYgMy4yNzE2MSwzLjg4ODU4IDMuMDc1MzEsMy45ODU0MyAzLjI1MzA1LDQuNjExNTEgMi45NzM0NCw0LjYyNDIyIDIuNzQ0LDQuNjY2MjkgMi45MDY3MSw1LjQ0NDAxIDIuMjY1MjQsNC42NjYyOSAyLjQwMTQ3LDUuNDQ0MDEgMi4xNjI2OSw1LjQ0NDAxIDIuMTk4NzMsNi4yMjE3MiAxLjg2NjAzLDUuOTk5MzQgMS42MjY1Myw1Ljk4NDcxIDEuMzg2NTMsNS45MDM0IDEuMjM4MjMsNi4yMjE3MyAxLjAxNzA5LDYuMjIxNzIgMC44MDM1LDYuMjIxNzIgMC41OTUyMSw2LjIyMTczIDAuMzg5ODksNi4yMjE3MiAwLjE4ODE2LDYuMjIxNzMgLTAuMDEzNiw2LjIyMTcyIC0wLjIxNTI5LDYuMjIxNzIgLTAuNDE3MDIsNi4yMjE3MyAtMC42MjMxMyw2LjIyMTcyIC0wLjgzMTg5LDYuMjIxNzIgLTEuMDc3OTIsNi4zOTI0MyAtMS4yMzcyMiw2LjA1MTAyIC0xLjQ5OTMsNi4yMjE3MiAtMS43NDE3OSw2LjIyMTczIC0xLjczMzg1LDUuNDQ0MDEgLTEuOTQxMjMsNS40NDQgLTIuNDE5MDMsNi4wNDc4NCAtMi4xNTAyMyw0Ljg0MDE4IC0yLjI2NzgyLDQuNjY2MjkgLTIuNDc2NDYsNC42NjYyOSAtMi44NjQ2NCw0LjkyODg3IC0yLjgwMTc5LDQuNDAzNzIgLTIuODkxMDUsNC4xNzQ5MyAtMy4zMTM5Nyw0LjM3OTk0IC0zLjIxODgxLDMuODg4NTggLTMuNTI0MywzLjg4ODU3IC0zLjA3NTE5LDMuMTEwODYgLTMuMzQ3NzksMy4xMTA4NyAtMy44NTE1MiwzLjI1Mzk4IC00LjA2NjMxLDMuMDg1NCAtNC4wNjYzMiwyLjc1MjI1IC00LjA2NjMxLDIuNDQxMjUgLTQuMDY2MzEsMi4xNDcwMiAtNC4wODA3OCwxLjg3NDQgLTQuMDUxODUsMS41OTM4NiAtNC4wNjYzMiwxLjM0MTU0IC00LjA2NjMxLDEuMDkxMzQgLTQuMDY2MzIsMC44NDY2MSAtNC4wNjYzMSwwLjYwNzAzIC00LjA2NjMyLDAuMzY5MzggLTQuMDY2MzEsMC4xMzQ5NiAtNC4wNjYzMSwtMC4wOTk1IC00LjA2NjMyLC0wLjMzMzg3IC0wLjgxMzI2LC0wLjA5NDkgdiAwIgogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZGU3MjU7c3Ryb2tlLXdpZHRoOjIiCiAgICAgICAgICAgaWQ9InBhdGg1ODgiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9InBhdGNoXzgiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSA2MzAuOTgxODIsNDQ4LjU2IFYgNjAuNDgiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2VlZThkNTtzdHJva2Utd2lkdGg6MC44O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXIiCiAgICAgICAgICAgaWQ9InBhdGg1OTEiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9InBhdGNoXzkiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSAxMDM2LjgsNDQ4LjU2IFYgNjAuNDgiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2VlZThkNTtzdHJva2Utd2lkdGg6MC44O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXIiCiAgICAgICAgICAgaWQ9InBhdGg1OTQiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9InBhdGNoXzEwIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gNjMwLjk4MTgyLDQ0OC41NiBIIDEwMzYuOCIKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZWVlOGQ1O3N0cm9rZS13aWR0aDowLjg7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlciIKICAgICAgICAgICBpZD0icGF0aDU5NyIgLz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICBpZD0icGF0Y2hfMTEiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSA2MzAuOTgxODIsNjAuNDggSCAxMDM2LjgiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2VlZThkNTtzdHJva2Utd2lkdGg6MC44O3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXIiCiAgICAgICAgICAgaWQ9InBhdGg2MDAiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICA8L2c+CiAgPGRlZnMKICAgICBpZD0iZGVmczYxMSI+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJwODMxOGQ5ZTFjZiI+CiAgICAgIDxyZWN0CiAgICAgICAgIGhlaWdodD0iMzg4LjA3OTk5IgogICAgICAgICB3aWR0aD0iNDA1LjgxODE4IgogICAgICAgICB4PSIxNDQiCiAgICAgICAgIHk9IjYwLjQ4IgogICAgICAgICBpZD0icmVjdDYwNSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJwNjA5NDdmNWE5YyI+CiAgICAgIDxyZWN0CiAgICAgICAgIGhlaWdodD0iMzg4LjA3OTk5IgogICAgICAgICB3aWR0aD0iNDA1LjgxODE4IgogICAgICAgICB4PSI2MzAuOTgxODEiCiAgICAgICAgIHk9IjYwLjQ4IgogICAgICAgICBpZD0icmVjdDYwOCIgLz4KICAgIDwvY2xpcFBhdGg+CiAgPC9kZWZzPgo8L3N2Zz4K" title="目标函数的等高线与l1范数球必然交于正方形顶点" class="center top2 bottom2 width75">
<p>椭圆与正方形必然交在正方形的顶点处，这意味着最优的<span class="mathjax-exps">$w_2 = 0$</span></p>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section><section data-notes="" lineno="1076" class="slide " data-line="1076" data-h="13" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换 主成分分析</h5></div></div>
<p>构造<span class="mathjax-exps">$\Rbb^D$</span>中的<span class="mathjax-exps">$d$</span>个标准正交基<span class="mathjax-exps">$\wv_1, \ldots, \wv_d$</span>，将样本投到该<span class="mathjax-exps">$d$</span>维子空间</p>
<p>

$$
\begin{align*}
    \Xv \in \Rbb^{m \times D} \xrightarrow[降维]{\Wv = [\wv_1, \ldots, \wv_d] \in \Rbb^{D \times d}} \Xv \Wv \in \Rbb^{m \times d} \xrightarrow[重构]{\Wv^\top \in \Rbb^{d \times D}} \Xv \Wv \Wv^\top
\end{align*}
$$
</p>

<p>投影到<span class="mathjax-exps">$d ~ (&lt;D)$</span>维子空间存在信息损失，<span class="mathjax-exps">$\Wv$</span>应使得<span class="blue">重构误差尽可能小</span></p>
<p>

$$
\begin{align*}
    \| \Xv &amp; - \Xv \Wv \Wv^\top \|_F^2 = \tr [(\Xv - \Xv \Wv \Wv^\top) (\Xv - \Xv \Wv \Wv^\top)^\top] \\
    &amp; = \tr [\Xv \Xv^\top - 2 \Xv \Wv \Wv^\top \Xv^\top + \Xv \Wv \class{blue}{\mathtip{\Wv^\top \Wv}{等于单位阵\Iv}} \Wv^\top \Xv^\top] \\
    &amp; = \tr [\Xv \Xv^\top - \Xv \Wv \Wv^\top \Xv^\top] \\
    &amp; = \const - \tr [\Wv^\top \Xv^\top \Xv \Wv] \quad \longleftarrow ~ \tr [\Av \Bv] = \tr [\Bv \Av] \\
    &amp; = \const - \wv_1^\top \Xv^\top \Xv \wv_1 - \cdots - \wv_d^\top \Xv^\top \Xv \wv_d
\end{align*}
$$
</p>

<p>

$$
\begin{align*}
    \Longrightarrow \quad \mathop{\mathrm{argmin}}_{\Wv^\top \Wv = \Iv} \| \Xv &amp; - \Xv \Wv \Wv^\top \|_F^2 = \mathop{\mathrm{argmax}}_{\Wv^\top \Wv = \Iv} \sum_{i \in [d]} \wv_i^\top \Xv^\top \Xv \wv_i
\end{align*}
$$
</p>

<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="1120" class="slide " data-line="1120" data-h="13" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换 主成分分析</h5></div></div>
<p>

$$
\begin{align*}
    \mathop{\mathrm{argmin}}_{\Wv^\top \Wv = \Iv} \| \Xv &amp; - \Xv \Wv \Wv^\top \|_F^2 = \mathop{\mathrm{argmax}}_{\Wv^\top \Wv = \Iv} \sum_{i \in [d]} \wv_i^\top \Xv^\top \Xv \wv_i
\end{align*}
$$
</p>

<p>假设已平移样本使其中心在原点 (不影响后续模型学习)，即<span class="mathjax-exps">$\onev^\top \Xv = \zerov$</span></p>
<p><span class="mathjax-exps">$\Xv \wv_1$</span>是样本在第<span class="mathjax-exps">$1$</span>个投影方向<span class="mathjax-exps">$\wv_1$</span>上的投影，投影均值<span class="mathjax-exps">$\onev^\top \Xv \wv_1 = 0$</span></p>
<p>

$$
\begin{align*}
    \wv_1^\top \Xv^\top \Xv \wv_1 = \sum_{i \in [m]} (\xv_i^\top \wv_1)^2 = \sum_{i \in [m]} (\xv_i^\top \wv_1 - 0)^2 = \var [\xv_i^\top \wv_1]
\end{align*}
$$
</p>

<p><span class="blue">最小化重构误差</span>等价于<span class="blue">最大化投影方差</span>，即投影后样本尽可能散得开</p>
<p>拉格朗日函数<span class="mathjax-exps">$L = \wv_1^\top \Xv^\top \Xv \wv_1 - \alpha (\wv_1^\top \wv_1 - 1)$</span></p>
<p>

$$
\begin{align*}
    \frac{\partial L}{\partial \wv_1} = 2 \Xv^\top \Xv \wv_1 - 2 \alpha \wv_1 = \zerov \Longrightarrow \mathtip{\wv_1^\top \Xv^\top \Xv \wv_1 = \alpha}{\wv_1应为\Xv^\top \Xv最大特征值对应的特征向量}
\end{align*}
$$
</p>

<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="1164" class="slide " data-line="1164" data-h="13" data-v="2">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换 主成分分析</h5></div></div>
<p><span class="blue">主成分分析</span> (PCA)：寻找一系列投影方向 (成分) 使重构误差最小</p>
<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">import</span> numpy <span class="token keyword">as</span> np
<span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>decomposition <span class="token keyword">import</span> PCA

X <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span>
    <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.697</span><span class="token punctuation">,</span> <span class="token number">0.460</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.774</span><span class="token punctuation">,</span> <span class="token number">0.376</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.666</span><span class="token punctuation">,</span> <span class="token number">0.091</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0.245</span><span class="token punctuation">,</span> <span class="token number">0.057</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">)</span>

pca <span class="token operator">=</span> PCA<span class="token punctuation">(</span>n_components<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token comment"># 降到2维</span>
XX <span class="token operator">=</span> pca<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">)</span>
XX
<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">2.00117642</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">0.8994997</span> <span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1.03113008</span><span class="token punctuation">,</span>  <span class="token number">0.31462009</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span> <span class="token number">0.69000731</span><span class="token punctuation">,</span>  <span class="token number">1.72221775</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span> <span class="token number">2.34229919</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1.13733814</span><span class="token punctuation">]</span><span class="token punctuation">]</span>
np<span class="token punctuation">.</span>linalg<span class="token punctuation">.</span>norm<span class="token punctuation">(</span>X <span class="token operator">-</span> pca<span class="token punctuation">.</span>inverse_transform<span class="token punctuation">(</span>XX<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 计算重构误差</span>
<span class="token number">1.2626787274464972</span>

pca <span class="token operator">=</span> PCA<span class="token punctuation">(</span>n_components<span class="token operator">=</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token comment"># 降到3维</span>
XX <span class="token operator">=</span> pca<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">)</span>
XX
<span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">2.00117642</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">0.8994997</span> <span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">0.60604575</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1.03113008</span><span class="token punctuation">,</span>  <span class="token number">0.31462009</span><span class="token punctuation">,</span>  <span class="token number">1.00575703</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span> <span class="token number">0.69000731</span><span class="token punctuation">,</span>  <span class="token number">1.72221775</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">0.46027295</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
 <span class="token punctuation">[</span> <span class="token number">2.34229919</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1.13733814</span><span class="token punctuation">,</span>  <span class="token number">0.06056167</span><span class="token punctuation">]</span><span class="token punctuation">]</span>

np<span class="token punctuation">.</span>linalg<span class="token punctuation">.</span>norm<span class="token punctuation">(</span>X <span class="token operator">-</span> pca<span class="token punctuation">.</span>inverse_transform<span class="token punctuation">(</span>XX<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 计算重构误差</span>
<span class="token number">1.7568561344411767e-15</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section><section data-notes="" lineno="1205" class="slide " data-line="1205" data-h="14" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换 随机投影</h5></div></div>
<p>Johnson–Lindenstrauss 定理：给定<span class="mathjax-exps">$\epsilon \in (0,1)$</span>和正整数<span class="mathjax-exps">$m$</span>，设<span class="mathjax-exps">$d$</span>满足</p>
<p>

$$
\begin{align*}
    d \ge 4 (\epsilon^2/2 - \epsilon^3/3)^{-1} \ln m
\end{align*}
$$
</p>

<p>则对<span class="mathjax-exps">$\Rbb^D$</span>中的任意<span class="mathjax-exps">$m$</span>个点组成的集合<span class="mathjax-exps">$\Scal$</span>，存在可在随机多项式时间内得到的线性映射<span class="mathjax-exps">$f: \Rbb^D \mapsto \Rbb^d$</span>使得对任意<span class="mathjax-exps">$\uv, \vv \in \Scal$</span>有</p>
<p>

$$
\begin{align*}
    (1 - \epsilon) \| \uv -\vv \|^2 \le \| f(\uv) - f(\vv) \|^2 \le (1 + \epsilon) \| \uv - \vv \|^2
\end{align*}
$$
</p>

<br>
<p>JL 定理表明<span class="blue">高维空间中的点集映射到低维空间可相对保持距离</span></p>
<br>
<p>投影矩阵通常采用</p>
<ul>
<li>高斯随机矩阵：每个元素从高斯随机变量<span class="mathjax-exps">$\Ncal(0,1/d)$</span>中采样</li>
<li>稀疏随机矩阵：每个元素以<span class="mathjax-exps">$1/2s$</span>的概率取<span class="mathjax-exps">$\pm \sqrt{s/d}$</span>，以<span class="mathjax-exps">$1-1/s$</span>的概率取<span class="mathjax-exps">$0$</span></li>
</ul>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="1246" class="slide " data-line="1246" data-h="14" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换 随机投影</h5></div></div>
<pre data-role="codeBlock" data-info="python {.line-numbers}" class="language-python line-numbers"><span class="token keyword">import</span> numpy <span class="token keyword">as</span> np
<span class="token keyword">from</span> scipy<span class="token punctuation">.</span>spatial <span class="token keyword">import</span> distance

X <span class="token operator">=</span> np<span class="token punctuation">.</span>random<span class="token punctuation">.</span>rand<span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">10000</span><span class="token punctuation">)</span>
D1 <span class="token operator">=</span> distance<span class="token punctuation">.</span>cdist<span class="token punctuation">(</span>X<span class="token punctuation">,</span> X<span class="token punctuation">,</span> <span class="token string">'euclidean'</span><span class="token punctuation">)</span> <span class="token comment"># 原样本的成对距离矩阵</span>

transformer <span class="token operator">=</span> random_projection<span class="token punctuation">.</span>GaussianRandomProjection<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># 高斯随机矩阵</span>
XX <span class="token operator">=</span> transformer<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">)</span>
D2 <span class="token operator">=</span> distance<span class="token punctuation">.</span>cdist<span class="token punctuation">(</span>XX<span class="token punctuation">,</span> XX<span class="token punctuation">,</span> <span class="token string">'euclidean'</span><span class="token punctuation">)</span> <span class="token comment"># 投影后样本的成对距离矩阵</span>

XX<span class="token punctuation">.</span>shape
<span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">3947</span><span class="token punctuation">)</span>

np<span class="token punctuation">.</span>linalg<span class="token punctuation">.</span>norm<span class="token punctuation">(</span>D1 <span class="token operator">-</span> D2<span class="token punctuation">,</span> <span class="token builtin">ord</span><span class="token operator">=</span><span class="token string">'fro'</span><span class="token punctuation">)</span> <span class="token comment"># 两个成对距离矩阵差的F范数</span>
<span class="token number">46.74573519884732</span>

transformer <span class="token operator">=</span> random_projection<span class="token punctuation">.</span>GaussianRandomProjection<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># 稀疏随机矩阵</span>
XX <span class="token operator">=</span> transformer<span class="token punctuation">.</span>fit_transform<span class="token punctuation">(</span>X<span class="token punctuation">)</span>
D2 <span class="token operator">=</span> distance<span class="token punctuation">.</span>cdist<span class="token punctuation">(</span>XX<span class="token punctuation">,</span> XX<span class="token punctuation">,</span> <span class="token string">'euclidean'</span><span class="token punctuation">)</span> <span class="token comment"># 投影后样本的成对距离矩阵</span>

np<span class="token punctuation">.</span>linalg<span class="token punctuation">.</span>norm<span class="token punctuation">(</span>D1 <span class="token operator">-</span> D2<span class="token punctuation">,</span> <span class="token builtin">ord</span><span class="token operator">=</span><span class="token string">'fro'</span><span class="token punctuation">)</span> <span class="token comment"># 两个成对距离矩阵差的F范数</span>
<span class="token number">43.819210159457796</span>
<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section><section data-notes="" lineno="1277" class="slide " data-line="1277" data-h="15" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换</h5></div></div>
<p>该步是模型学习前的最后一步，亦有将该步与模型学习融合的做法</p>
<br>
<div class="invis" markdown="1">
<p>当部分特征冗余甚至有害时，挑选或生成有用的特征子集</p>
<ul>
<li>去除低方差特征，特别是那些在所有样本上取值均不变的特征</li>
<li>先计算 F 检验值、卡方检验值、互信息、线性相关性等统计量，然后据此设立阈值选择特征</li>
<li>引入<span class="mathjax-exps">$\ell_1$</span>等稀疏范数作为约束，将选择特征与模型学习合二为一</li>
<li>通过 PCA、随机投影等降维技术浓缩现有特征</li>
</ul>
</div>
<br>
<p>当特征稀缺时，利用现有特征构造新的特征</p>
<ul>
<li>凭经验显式构造：<span class="mathjax-exps">$\xv = [x_1; x_2] \xrightarrow{\Rbb^2 \mapsto \Rbb^6} \xvt = [x_1^2; x_2^2; \sqrt{2} x_1 x_2; \sqrt{2} x_1; \sqrt{2} x_2; 1]$</span></li>
<li>利用核函数<span class="mathjax-exps">$\kappa(\xv, \zv) = \phi(\xv)^\top \phi(\zv)$</span>隐式构造，其中<span class="mathjax-exps">$\phi: \Rbb^d \mapsto \Hbb$</span>是核映射，代表性方法为核方法</li>
<li>利用非线性函数复合<span class="mathjax-exps">$f_n ( f_{n-1} ( \cdots f_2 (f_1 (\xv))))$</span>，代表性方法为神经网络</li>
</ul>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="1306" class="slide " data-line="1306" data-h="15" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换 构造新特征</h5></div></div>
<p>凭经验显式构造映射<span class="mathjax-exps">$\phi$</span>，如二次多项式特征：</p>
<p>

$$
\begin{align*}
    \xv = [x_1; x_2] \xrightarrow{\phi: ~ \Rbb^2 \mapsto \Rbb^6} \xvt = [x_1^2; x_2^2; \sqrt{2} x_1 x_2; \sqrt{2} x_1; \sqrt{2} x_2; 1]
\end{align*}
$$
</p>

<img src="data:image/svg+xml;charset=utf-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgd2lkdGg9IjM5Ni44NTU0N3B0IgogICBoZWlnaHQ9IjExMy4zODY3MnB0IgogICB2aWV3Qm94PSIwIDAgMzk2Ljg1NTQ3IDExMy4zODY3MiIKICAgdmVyc2lvbj0iMS4yIgogICBpZD0ic3ZnMTU3IgogICBzb2RpcG9kaTpkb2NuYW1lPSJrZXJuZWwuc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjEuMSAoM2JmNWFlMGQyNSwgMjAyMS0wOS0yMCkiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0ibmFtZWR2aWV3MTU5IgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB0IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIyLjMzODI3MzYiCiAgICAgaW5rc2NhcGU6Y3g9IjQxNS4wNDk4MSIKICAgICBpbmtzY2FwZTpjeT0iMTI1LjMwNjEzIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMzg0MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIyMTA2IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSI1NCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzE1NyIgLz4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDYiPgogICAgPGcKICAgICAgIGlkPSJnNDQiPgogICAgICA8c3ltYm9sCiAgICAgICAgIG92ZXJmbG93PSJ2aXNpYmxlIgogICAgICAgICBpZD0iZ2x5cGgwLTAiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9InN0cm9rZTpub25lIgogICAgICAgICAgIGQ9IiIKICAgICAgICAgICBpZD0icGF0aDIiIC8+CiAgICAgIDwvc3ltYm9sPgogICAgICA8c3ltYm9sCiAgICAgICAgIG92ZXJmbG93PSJ2aXNpYmxlIgogICAgICAgICBpZD0iZ2x5cGgwLTEiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9InN0cm9rZTpub25lIgogICAgICAgICAgIGQ9Im0gNC41OTM3NSwtNy4wMzEyNSBjIDAsLTAuMDMxMjUgMC4wMzEyNSwtMC4xNDA2MjUgMC4wMzEyNSwtMC4xNTYyNSAwLDAgMCwtMC4wOTM3NSAtMC4xMjUsLTAuMDkzNzUgLTAuMTA5Mzc1LDAgLTAuMTI1LDAuMDMxMjUgLTAuMTU2MjUsMC4yMDMxMjUgTCAzLjczNDM3NSwtNC42NTYyNSBjIC0xLjY3MTg3NSwwLjA2MjUgLTMuMjE4NzUsMS40NTMxMjUgLTMuMjE4NzUsMi44NzUgMCwxIDAuNzM0Mzc1LDEuODI4MTI1IDIuMDE1NjI1LDEuOTA2MjUgQyAyLjQ1MzEyNSwwLjQ1MzEyNSAyLjM3NSwwLjc4MTI1IDIuMjgxMjUsMS4xMDkzNzUgMi4xNTYyNSwxLjYwOTM3NSAyLjA2MjUsMiAyLjA2MjUsMi4wMzEyNSBjIDAsMC4xMDkzNzUgMC4wNjI1LDAuMTI1IDAuMTI1LDAuMTI1IDAuMDQ2ODc1LDAgMC4wNjI1LC0wLjAxNTYyNSAwLjA5Mzc1LC0wLjA0Njg3NSBDIDIuMzEyNSwyLjA5Mzc1IDIuMzc1LDEuODQzNzUgMi40MDYyNSwxLjY4NzUgTCAyLjc5Njg3NSwwLjEyNSBDIDQuNSwwLjA3ODEyNSA2LjAxNTYyNSwtMS4zNDM3NSA2LjAxNTYyNSwtMi43NSA2LjAxNTYyNSwtMy41NzgxMjUgNS40NTMxMjUsLTQuNTQ2ODc1IDQsLTQuNjU2MjUgWiBtIC0yLjAxNTYyNSw2LjkyMTg3NSBjIC0wLjYyNSwtMC4wMzEyNSAtMS4zNzUsLTAuMzkwNjI1IC0xLjM3NSwtMS40Mzc1IDAsLTEuMjY1NjI1IDAuODkwNjI1LC0yLjczNDM3NSAyLjQ2ODc1LC0yLjg3NSB6IG0gMS4zNTkzNzUsLTQuMzEyNSBjIDAuNzk2ODc1LDAuMDQ2ODc1IDEuMzkwNjI1LDAuNTMxMjUgMS4zOTA2MjUsMS40NTMxMjUgMCwxLjIzNDM3NSAtMC44OTA2MjUsMi43MzQzNzUgLTIuNDY4NzUsMi44NTkzNzUgeiBtIDAsMCIKICAgICAgICAgICBpZD0icGF0aDUiIC8+CiAgICAgIDwvc3ltYm9sPgogICAgICA8c3ltYm9sCiAgICAgICAgIG92ZXJmbG93PSJ2aXNpYmxlIgogICAgICAgICBpZD0iZ2x5cGgwLTIiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9InN0cm9rZTpub25lIgogICAgICAgICAgIGQ9Ik0gMy41LC0zLjE3MTg3NSBDIDMuNTYyNSwtMy40Mzc1IDMuODEyNSwtNC40MDYyNSA0LjU0Njg3NSwtNC40MDYyNSBjIDAuMDQ2ODc1LDAgMC4yOTY4NzUsMCAwLjUzMTI1LDAuMTI1IC0wLjI5Njg3NSwwLjA2MjUgLTAuNTE1NjI1LDAuMzI4MTI1IC0wLjUxNTYyNSwwLjU3ODEyNSAwLDAuMTcxODc1IDAuMTI1LDAuMzU5Mzc1IDAuNDA2MjUsMC4zNTkzNzUgMC4yMzQzNzUsMCAwLjU2MjUsLTAuMTg3NSAwLjU2MjUsLTAuNjA5Mzc1IDAsLTAuNTQ2ODc1IC0wLjYyNSwtMC42ODc1IC0wLjk2ODc1LC0wLjY4NzUgLTAuNjA5Mzc1LDAgLTAuOTg0Mzc1LDAuNTYyNSAtMS4xMDkzNzUsMC43OTY4NzUgLTAuMjY1NjI1LC0wLjY4NzUgLTAuODI4MTI1LC0wLjc5Njg3NSAtMS4xMjUsLTAuNzk2ODc1IC0xLjA5Mzc1LDAgLTEuNzAzMTI1LDEuMzU5Mzc1IC0xLjcwMzEyNSwxLjYwOTM3NSAwLDAuMTA5Mzc1IDAuMTA5Mzc1LDAuMTA5Mzc1IDAuMTI1LDAuMTA5Mzc1IDAuMDkzNzUsMCAwLjEyNSwtMC4wMTU2MjUgMC4xNDA2MjUsLTAuMTA5Mzc1IDAuMzU5Mzc1LC0xLjEwOTM3NSAxLjA0Njg3NSwtMS4zNzUgMS40MDYyNSwtMS4zNzUgMC4yMDMxMjUsMCAwLjU2MjUsMC4wOTM3NSAwLjU2MjUsMC43MDMxMjUgMCwwLjMyODEyNSAtMC4xNzE4NzUsMS4wMzEyNSAtMC41NjI1LDIuNSAtMC4xNzE4NzUsMC42NDA2MjUgLTAuNTMxMjUsMS4wOTM3NSAtMSwxLjA5Mzc1IC0wLjA2MjUsMCAtMC4yOTY4NzUsMCAtMC41MTU2MjUsLTAuMTQwNjI1IDAuMjY1NjI1LC0wLjA0Njg3NSAwLjQ4NDM3NSwtMC4yODEyNSAwLjQ4NDM3NSwtMC41NjI1IDAsLTAuMjk2ODc1IC0wLjIxODc1LC0wLjM3NSAtMC4zOTA2MjUsLTAuMzc1IC0wLjMxMjUsMCAtMC41NzgxMjUsMC4yODEyNSAtMC41NzgxMjUsMC42MDkzNzUgMCwwLjQ4NDM3NSAwLjUzMTI1LDAuNjg3NSAxLDAuNjg3NSAwLjY4NzUsMCAxLjA2MjUsLTAuNzM0Mzc1IDEuMDkzNzUsLTAuNzk2ODc1IDAuMTI1LDAuMzkwNjI1IDAuNSwwLjc5Njg3NSAxLjE0MDYyNSwwLjc5Njg3NSAxLjA3ODEyNSwwIDEuNjcxODc1LC0xLjM0Mzc1IDEuNjcxODc1LC0xLjYwOTM3NSAwLC0wLjEwOTM3NSAtMC4wOTM3NSwtMC4xMDkzNzUgLTAuMTI1LC0wLjEwOTM3NSAtMC4wOTM3NSwwIC0wLjEwOTM3NSwwLjA0Njg3NSAtMC4xMjUsMC4xMjUgLTAuMzU5Mzc1LDEuMTA5Mzc1IC0xLjA2MjUsMS4zNzUgLTEuNDA2MjUsMS4zNzUgLTAuNDA2MjUsMCAtMC41NzgxMjUsLTAuMzQzNzUgLTAuNTc4MTI1LC0wLjcwMzEyNSAwLC0wLjIzNDM3NSAwLjA2MjUsLTAuNDUzMTI1IDAuMTg3NSwtMC45MjE4NzUgeiBtIDAsMCIKICAgICAgICAgICBpZD0icGF0aDgiIC8+CiAgICAgIDwvc3ltYm9sPgogICAgICA8c3ltYm9sCiAgICAgICAgIG92ZXJmbG93PSJ2aXNpYmxlIgogICAgICAgICBpZD0iZ2x5cGgwLTMiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9InN0cm9rZTpub25lIgogICAgICAgICAgIGQ9Im0gMi4xMjUsLTAuMDE1NjI1IGMgMCwtMC42ODc1IC0wLjI1LC0xLjA5Mzc1IC0wLjY3MTg3NSwtMS4wOTM3NSAtMC4zNDM3NSwwIC0wLjU0Njg3NSwwLjI2NTYyNSAtMC41NDY4NzUsMC41NDY4NzUgMCwwLjI5Njg3NSAwLjIwMzEyNSwwLjU2MjUgMC41NDY4NzUsMC41NjI1IDAuMTI1LDAgMC4yNjU2MjUsLTAuMDQ2ODc1IDAuMzc1LC0wLjE0MDYyNSAwLjAzMTI1LC0wLjAxNTYyNSAwLjA0Njg3NSwtMC4wMzEyNSAwLjA0Njg3NSwtMC4wMzEyNSAwLjAxNTYyNSwwIDAuMDMxMjUsMC4wMTU2MjUgMC4wMzEyNSwwLjE1NjI1IDAsMC43ODEyNSAtMC4zNzUsMS40MDYyNSAtMC43MTg3NSwxLjc2NTYyNSAtMC4xMDkzNzUsMC4xMDkzNzUgLTAuMTA5Mzc1LDAuMTI1IC0wLjEwOTM3NSwwLjE1NjI1IDAsMC4wNzgxMjUgMC4wNDY4NzUsMC4xMjUgMC4wOTM3NSwwLjEyNSAwLjEyNSwwIDAuOTUzMTI1LC0wLjgxMjUgMC45NTMxMjUsLTIuMDQ2ODc1IHogbSAwLDAiCiAgICAgICAgICAgaWQ9InBhdGgxMSIgLz4KICAgICAgPC9zeW1ib2w+CiAgICAgIDxzeW1ib2wKICAgICAgICAgb3ZlcmZsb3c9InZpc2libGUiCiAgICAgICAgIGlkPSJnbHlwaDEtMCI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiCiAgICAgICAgICAgZD0iIgogICAgICAgICAgIGlkPSJwYXRoMTQiIC8+CiAgICAgIDwvc3ltYm9sPgogICAgICA8c3ltYm9sCiAgICAgICAgIG92ZXJmbG93PSJ2aXNpYmxlIgogICAgICAgICBpZD0iZ2x5cGgxLTEiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9InN0cm9rZTpub25lIgogICAgICAgICAgIGQ9Im0gMi4wMTU2MjUsLTMuOTY4NzUgYyAwLC0wLjMxMjUgLTAuMjUsLTAuNTYyNSAtMC41NjI1LC0wLjU2MjUgLTAuMjk2ODc1LDAgLTAuNTQ2ODc1LDAuMjUgLTAuNTQ2ODc1LDAuNTYyNSAwLDAuMjk2ODc1IDAuMjUsMC41NjI1IDAuNTQ2ODc1LDAuNTYyNSAwLjMxMjUsMCAwLjU2MjUsLTAuMjY1NjI1IDAuNTYyNSwtMC41NjI1IHogbSAwLDMuNDA2MjUgYyAwLC0wLjI5Njg3NSAtMC4yNSwtMC41NDY4NzUgLTAuNTYyNSwtMC41NDY4NzUgLTAuMjk2ODc1LDAgLTAuNTQ2ODc1LDAuMjUgLTAuNTQ2ODc1LDAuNTQ2ODc1IDAsMC4zMTI1IDAuMjUsMC41NjI1IDAuNTQ2ODc1LDAuNTYyNSAwLjMxMjUsMCAwLjU2MjUsLTAuMjUgMC41NjI1LC0wLjU2MjUgeiBtIDAsMCIKICAgICAgICAgICBpZD0icGF0aDE3IiAvPgogICAgICA8L3N5bWJvbD4KICAgICAgPHN5bWJvbAogICAgICAgICBvdmVyZmxvdz0idmlzaWJsZSIKICAgICAgICAgaWQ9ImdseXBoMS0yIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZSIKICAgICAgICAgICBkPSJNIDIuNjcxODc1LDIuNjI1IFYgMi4yMDMxMjUgSCAxLjY1NjI1IHYgLTkuNjU2MjUgSCAyLjY3MTg3NSBWIC03Ljg3NSBoIC0xLjQzNzUgdiAxMC41IHogbSAwLDAiCiAgICAgICAgICAgaWQ9InBhdGgyMCIgLz4KICAgICAgPC9zeW1ib2w+CiAgICAgIDxzeW1ib2wKICAgICAgICAgb3ZlcmZsb3c9InZpc2libGUiCiAgICAgICAgIGlkPSJnbHlwaDEtMyI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiCiAgICAgICAgICAgZD0ibSAxLjY3MTg3NSwtNy44NzUgaCAtMS40Mzc1IHYgMC40MjE4NzUgSCAxLjI1IHYgOS42NTYyNSBIIDAuMjM0Mzc1IFYgMi42MjUgaCAxLjQzNzUgeiBtIDAsMCIKICAgICAgICAgICBpZD0icGF0aDIzIiAvPgogICAgICA8L3N5bWJvbD4KICAgICAgPHN5bWJvbAogICAgICAgICBvdmVyZmxvdz0idmlzaWJsZSIKICAgICAgICAgaWQ9ImdseXBoMi0wIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZSIKICAgICAgICAgICBkPSIiCiAgICAgICAgICAgaWQ9InBhdGgyNiIgLz4KICAgICAgPC9zeW1ib2w+CiAgICAgIDxzeW1ib2wKICAgICAgICAgb3ZlcmZsb3c9InZpc2libGUiCiAgICAgICAgIGlkPSJnbHlwaDItMSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiCiAgICAgICAgICAgZD0ibSAyLjMyODEyNSwtNC40Mzc1IGMgMCwtMC4xODc1IDAsLTAuMTg3NSAtMC4yMDMxMjUsLTAuMTg3NSAtMC40NTMxMjUsMC40Mzc1IC0xLjA3ODEyNSwwLjQzNzUgLTEuMzU5Mzc1LDAuNDM3NSB2IDAuMjUgYyAwLjE1NjI1LDAgMC42MjUsMCAxLC0wLjE4NzUgdiAzLjU0Njg3NSBjIDAsMC4yMzQzNzUgMCwwLjMyODEyNSAtMC42ODc1LDAuMzI4MTI1IEggMC44MTI1IFYgMCBjIDAuMTI1LDAgMC45ODQzNzUsLTAuMDMxMjUgMS4yMzQzNzUsLTAuMDMxMjUgMC4yMTg3NSwwIDEuMDkzNzUsMC4wMzEyNSAxLjI1LDAuMDMxMjUgViAtMC4yNSBIIDMuMDMxMjUgYyAtMC43MDMxMjUsMCAtMC43MDMxMjUsLTAuMDkzNzUgLTAuNzAzMTI1LC0wLjMyODEyNSB6IG0gMCwwIgogICAgICAgICAgIGlkPSJwYXRoMjkiIC8+CiAgICAgIDwvc3ltYm9sPgogICAgICA8c3ltYm9sCiAgICAgICAgIG92ZXJmbG93PSJ2aXNpYmxlIgogICAgICAgICBpZD0iZ2x5cGgyLTIiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9InN0cm9rZTpub25lIgogICAgICAgICAgIGQ9Ik0gMy41MTU2MjUsLTEuMjY1NjI1IEggMy4yODEyNSBjIC0wLjAxNTYyNSwwLjE1NjI1IC0wLjA5Mzc1LDAuNTYyNSAtMC4xODc1LDAuNjI1IEMgMy4wNDY4NzUsLTAuNTkzNzUgMi41MTU2MjUsLTAuNTkzNzUgMi40MDYyNSwtMC41OTM3NSBIIDEuMTI1IGMgMC43MzQzNzUsLTAuNjQwNjI1IDAuOTg0Mzc1LC0wLjg0Mzc1IDEuMzkwNjI1LC0xLjE3MTg3NSAwLjUxNTYyNSwtMC40MDYyNSAxLC0wLjg0Mzc1IDEsLTEuNSAwLC0wLjg0Mzc1IC0wLjczNDM3NSwtMS4zNTkzNzUgLTEuNjI1LC0xLjM1OTM3NSAtMC44NTkzNzUsMCAtMS40NTMxMjUsMC42MDkzNzUgLTEuNDUzMTI1LDEuMjUgMCwwLjM0Mzc1IDAuMjk2ODc1LDAuMzkwNjI1IDAuMzc1LDAuMzkwNjI1IDAuMTU2MjUsMCAwLjM1OTM3NSwtMC4xMjUgMC4zNTkzNzUsLTAuMzc1IDAsLTAuMTI1IC0wLjA0Njg3NSwtMC4zNzUgLTAuNDA2MjUsLTAuMzc1IEMgMC45ODQzNzUsLTQuMjE4NzUgMS40NTMxMjUsLTQuMzc1IDEuNzgxMjUsLTQuMzc1IGMgMC43MDMxMjUsMCAxLjA2MjUsMC41NDY4NzUgMS4wNjI1LDEuMTA5Mzc1IDAsMC42MDkzNzUgLTAuNDM3NSwxLjA3ODEyNSAtMC42NTYyNSwxLjMyODEyNSBMIDAuNTE1NjI1LC0wLjI2NTYyNSBDIDAuNDM3NSwtMC4yMDMxMjUgMC40Mzc1LC0wLjE4NzUgMC40Mzc1LDAgaCAyLjg3NSB6IG0gMCwwIgogICAgICAgICAgIGlkPSJwYXRoMzIiIC8+CiAgICAgIDwvc3ltYm9sPgogICAgICA8c3ltYm9sCiAgICAgICAgIG92ZXJmbG93PSJ2aXNpYmxlIgogICAgICAgICBpZD0iZ2x5cGgzLTAiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9InN0cm9rZTpub25lIgogICAgICAgICAgIGQ9IiIKICAgICAgICAgICBpZD0icGF0aDM1IiAvPgogICAgICA8L3N5bWJvbD4KICAgICAgPHN5bWJvbAogICAgICAgICBvdmVyZmxvdz0idmlzaWJsZSIKICAgICAgICAgaWQ9ImdseXBoMy0xIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZSIKICAgICAgICAgICBkPSJtIDEsLTIuNDIxODc1IGMgMC4wNjI1LDAgMC4yOTY4NzUsMCAwLjI5Njg3NSwtMC4yMDMxMjUgQyAxLjI5Njg3NSwtMi44MjgxMjUgMS4wNjI1LC0yLjgyODEyNSAxLC0yLjgyODEyNSB2IC0xLjM3NSBjIDAsLTAuMTcxODc1IDAsLTAuMzc1IC0wLjIxODc1LC0wLjM3NSAtMC4yMDMxMjUsMCAtMC4yMDMxMjUsMC4yMDMxMjUgLTAuMjAzMTI1LDAuMzc1IHYgMy4xNTYyNSBjIDAsMC4xNzE4NzUgMCwwLjM3NSAwLjIwMzEyNSwwLjM3NSBDIDEsLTAuNjcxODc1IDEsLTAuODc1IDEsLTEuMDQ2ODc1IFogbSAwLDAiCiAgICAgICAgICAgaWQ9InBhdGgzOCIgLz4KICAgICAgPC9zeW1ib2w+CiAgICAgIDxzeW1ib2wKICAgICAgICAgb3ZlcmZsb3c9InZpc2libGUiCiAgICAgICAgIGlkPSJnbHlwaDMtMiI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiCiAgICAgICAgICAgZD0iTSA4Ljc1LC0yLjQyMTg3NSBDIDguMTcxODc1LC0xLjk2ODc1IDcuODkwNjI1LC0xLjU0Njg3NSA3LjgxMjUsLTEuNDA2MjUgNy4zNDM3NSwtMC42ODc1IDcuMjUsLTAuMDE1NjI1IDcuMjUsLTAuMDE1NjI1IGMgMCwwLjEyNSAwLjEyNSwwLjEyNSAwLjIxODc1LDAuMTI1IDAuMTcxODc1LDAgMC4xODc1LC0wLjAxNTYyNSAwLjIzNDM3NSwtMC4yMDMxMjUgQyA3LjkzNzUsLTEuMTI1IDguNTYyNSwtMiA5Ljc1LC0yLjQ4NDM3NSA5Ljg3NSwtMi41MzEyNSA5LjkwNjI1LC0yLjU0Njg3NSA5LjkwNjI1LC0yLjYyNSBjIDAsLTAuMDc4MTI1IC0wLjA2MjUsLTAuMTA5Mzc1IC0wLjA5Mzc1LC0wLjEwOTM3NSAtMC40NTMxMjUsLTAuMTg3NSAtMS43MzQzNzUsLTAuNzAzMTI1IC0yLjEyNSwtMi40Njg3NSAtMC4wMzEyNSwtMC4xMjUgLTAuMDQ2ODc1LC0wLjE1NjI1IC0wLjIxODc1LC0wLjE1NjI1IC0wLjA5Mzc1LDAgLTAuMjE4NzUsMCAtMC4yMTg3NSwwLjEyNSAwLDAuMDE1NjI1IDAuMDkzNzUsMC42NzE4NzUgMC41NDY4NzUsMS4zNzUgQyA4LC0zLjUzMTI1IDguMzEyNSwtMy4xNzE4NzUgOC43NSwtMi44MjgxMjUgSCAwLjk1MzEyNSBjIC0wLjE4NzUsMCAtMC4zNzUsMCAtMC4zNzUsMC4yMDMxMjUgMCwwLjIwMzEyNSAwLjE4NzUsMC4yMDMxMjUgMC4zNzUsMC4yMDMxMjUgeiBtIDAsMCIKICAgICAgICAgICBpZD0icGF0aDQxIiAvPgogICAgICA8L3N5bWJvbD4KICAgIDwvZz4KICA8L2RlZnM+CiAgPGcKICAgICBpZD0iZzM0OCIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtOTMuMzk4NDM3LC03Mi4zOTg0MzgpIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNTc2ZTczO3N0cm9rZS13aWR0aDowLjc5NzAxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDkzLjM5ODQzNywxMjkuMDg5ODQgSCAyMDQuMTk1MzEiCiAgICAgICBpZD0icGF0aDUwIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiM1NzZlNzM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICBkPSJtIDIwNi43ODUxNiwxMjkuMDg5ODQgLTQuMTQ0NTQsLTIuMDcwMzEgMS41NTQ2OSwyLjA3MDMxIC0xLjU1NDY5LDIuMDc0MjIiCiAgICAgICBpZD0icGF0aDUyIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1NzZlNzM7c3Ryb2tlLXdpZHRoOjAuNzk3MDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMTUwLjA4OTg0LDE4NS43ODUxNiBWIDc0Ljk4ODI4MSIKICAgICAgIGlkPSJwYXRoNTQiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzU3NmU3MztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgIGQ9Im0gMTUwLjA4OTg0LDcyLjM5ODQzOCAtMi4wNzAzMSw0LjE0NDUzMSAyLjA3MDMxLC0xLjU1NDY4OCAyLjA3NDIyLDEuNTU0Njg4IgogICAgICAgaWQ9InBhdGg1NiIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMjM4YWQxO2ZpbGwtb3BhY2l0eTowLjU7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICBkPSJtIDE3OC40Mzc1LDEyOS4wODk4NCBjIDAsLTE1LjY1NjI1IC0xMi42OTE0MSwtMjguMzQzNzUgLTI4LjM0NzY2LC0yOC4zNDM3NSAtMTUuNjU2MjUsMCAtMjguMzQzNzUsMTIuNjg3NSAtMjguMzQzNzUsMjguMzQzNzUgMCwxNS42NTYyNSAxMi42ODc1LDI4LjM0NzY2IDI4LjM0Mzc1LDI4LjM0NzY2IDE1LjY1NjI1LDAgMjguMzQ3NjYsLTEyLjY5MTQxIDI4LjM0NzY2LC0yOC4zNDc2NiB6IG0gMCwwIgogICAgICAgaWQ9InBhdGg1OCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojZGMzMDJlO2ZpbGwtb3BhY2l0eTowLjU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiCiAgICAgICBkPSJNIDEwNy41NzAzMSwxNzEuNjA5MzcgViA4Ni41NzAzMTIgaCA4NS4wMzkwNiB2IDg1LjAzOTA1OCB6IG0gNzAuODY3MTksLTQyLjUxOTUzIGMgMCwtMTUuNjU2MjUgLTEyLjY5MTQxLC0yOC4zNDM3NSAtMjguMzQ3NjYsLTI4LjM0Mzc1IC0xNS42NTYyNSwwIC0yOC4zNDM3NSwxMi42ODc1IC0yOC4zNDM3NSwyOC4zNDM3NSAwLDE1LjY1NjI1IDEyLjY4NzUsMjguMzQ3NjYgMjguMzQzNzUsMjguMzQ3NjYgMTUuNjU2MjUsMCAyOC4zNDc2NiwtMTIuNjkxNDEgMjguMzQ3NjYsLTI4LjM0NzY2IHogbSAwLDAiCiAgICAgICBpZD0icGF0aDYwIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1NzZlNzM7c3Ryb2tlLXdpZHRoOjAuNzk3MDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMjM1LjEzMjgxLDEyOS4wODk4NCBIIDM0NS45Mjk2OSIKICAgICAgIGlkPSJwYXRoNjIiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzU3NmU3MztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgIGQ9Im0gMzQ4LjUxOTUzLDEyOS4wODk4NCAtNC4xNDQ1MywtMi4wNzAzMSAxLjU1NDY5LDIuMDcwMzEgLTEuNTU0NjksMi4wNzQyMiIKICAgICAgIGlkPSJwYXRoNjQiIC8+CiAgICA8ZwogICAgICAgc3R5bGU9ImZpbGw6I2QxMzU3ZjtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJnNjgiPgogICAgICA8dXNlCiAgICAgICAgIHhsaW5rOmhyZWY9IiNnbHlwaDAtMSIKICAgICAgICAgeD0iMjQ0LjcxNCIKICAgICAgICAgeT0iMTIyLjU2OCIKICAgICAgICAgaWQ9InVzZTY2IgogICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgPC9nPgogICAgPGcKICAgICAgIHN0eWxlPSJmaWxsOiNkMTM1N2Y7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpZD0iZzcyIj4KICAgICAgPHVzZQogICAgICAgICB4bGluazpocmVmPSIjZ2x5cGgxLTEiCiAgICAgICAgIHg9IjI1My44ODY5OSIKICAgICAgICAgeT0iMTIyLjU2OCIKICAgICAgICAgaWQ9InVzZTcwIgogICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgPC9nPgogICAgPGcKICAgICAgIHN0eWxlPSJmaWxsOiNkMTM1N2Y7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpZD0iZzc2Ij4KICAgICAgPHVzZQogICAgICAgICB4bGluazpocmVmPSIjZ2x5cGgxLTIiCiAgICAgICAgIHg9IjI1OS43MDQwMSIKICAgICAgICAgeT0iMTIyLjU2OCIKICAgICAgICAgaWQ9InVzZTc0IgogICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgPC9nPgogICAgPGcKICAgICAgIHN0eWxlPSJmaWxsOiNkMTM1N2Y7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpZD0iZzgwIj4KICAgICAgPHVzZQogICAgICAgICB4bGluazpocmVmPSIjZ2x5cGgwLTIiCiAgICAgICAgIHg9IjI2Mi42MzY5OSIKICAgICAgICAgeT0iMTIyLjU2OCIKICAgICAgICAgaWQ9InVzZTc4IgogICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgPC9nPgogICAgPGcKICAgICAgIHN0eWxlPSJmaWxsOiNkMTM1N2Y7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpZD0iZzg0Ij4KICAgICAgPHVzZQogICAgICAgICB4bGluazpocmVmPSIjZ2x5cGgyLTEiCiAgICAgICAgIHg9IjI2OC42MzgiCiAgICAgICAgIHk9IjEyNC4xNDMiCiAgICAgICAgIGlkPSJ1c2U4MiIKICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZmlsbDojZDEzNTdmO2ZpbGwtb3BhY2l0eToxIgogICAgICAgaWQ9Imc4OCI+CiAgICAgIDx1c2UKICAgICAgICAgeGxpbms6aHJlZj0iI2dseXBoMC0zIgogICAgICAgICB4PSIyNzMuMTA4IgogICAgICAgICB5PSIxMjIuNTY4IgogICAgICAgICBpZD0idXNlODYiCiAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICA8L2c+CiAgICA8ZwogICAgICAgc3R5bGU9ImZpbGw6I2QxMzU3ZjtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJnOTIiPgogICAgICA8dXNlCiAgICAgICAgIHhsaW5rOmhyZWY9IiNnbHlwaDAtMiIKICAgICAgICAgeD0iMjc3Ljc1OTQ5IgogICAgICAgICB5PSIxMjIuNTY4IgogICAgICAgICBpZD0idXNlOTAiCiAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICA8L2c+CiAgICA8ZwogICAgICAgc3R5bGU9ImZpbGw6I2QxMzU3ZjtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJnOTYiPgogICAgICA8dXNlCiAgICAgICAgIHhsaW5rOmhyZWY9IiNnbHlwaDItMiIKICAgICAgICAgeD0iMjgzLjc3NDk5IgogICAgICAgICB5PSIxMjQuMTQzIgogICAgICAgICBpZD0idXNlOTQiCiAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICA8L2c+CiAgICA8ZwogICAgICAgc3R5bGU9ImZpbGw6I2QxMzU3ZjtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJnMTAwIj4KICAgICAgPHVzZQogICAgICAgICB4bGluazpocmVmPSIjZ2x5cGgxLTMiCiAgICAgICAgIHg9IjI4OC4yNDUiCiAgICAgICAgIHk9IjEyMi41NjgiCiAgICAgICAgIGlkPSJ1c2U5OCIKICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZmlsbDojZDEzNTdmO2ZpbGwtb3BhY2l0eToxIgogICAgICAgaWQ9ImcxMDYiPgogICAgICA8dXNlCiAgICAgICAgIHhsaW5rOmhyZWY9IiNnbHlwaDMtMSIKICAgICAgICAgeD0iMjk0LjA3OCIKICAgICAgICAgeT0iMTIyLjU2OCIKICAgICAgICAgaWQ9InVzZTEwMiIKICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgICAgPHVzZQogICAgICAgICB4bGluazpocmVmPSIjZ2x5cGgzLTIiCiAgICAgICAgIHg9IjI5NC4wNzgiCiAgICAgICAgIHk9IjEyMi41NjgiCiAgICAgICAgIGlkPSJ1c2UxMDQiCiAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICA8L2c+CiAgICA8ZwogICAgICAgc3R5bGU9ImZpbGw6I2QxMzU3ZjtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJnMTEwIj4KICAgICAgPHVzZQogICAgICAgICB4bGluazpocmVmPSIjZ2x5cGgxLTIiCiAgICAgICAgIHg9IjMwNy40OTUiCiAgICAgICAgIHk9IjEyMi41NjgiCiAgICAgICAgIGlkPSJ1c2UxMDgiCiAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICA8L2c+CiAgICA8ZwogICAgICAgc3R5bGU9ImZpbGw6I2QxMzU3ZjtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJnMTE0Ij4KICAgICAgPHVzZQogICAgICAgICB4bGluazpocmVmPSIjZ2x5cGgwLTIiCiAgICAgICAgIHg9IjMxMC40MTEwMSIKICAgICAgICAgeT0iMTIyLjU2OCIKICAgICAgICAgaWQ9InVzZTExMiIKICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZmlsbDojZDEzNTdmO2ZpbGwtb3BhY2l0eToxIgogICAgICAgaWQ9ImcxMTgiPgogICAgICA8dXNlCiAgICAgICAgIHhsaW5rOmhyZWY9IiNnbHlwaDItMiIKICAgICAgICAgeD0iMzE2LjQxMTk5IgogICAgICAgICB5PSIxMTguNzU4IgogICAgICAgICBpZD0idXNlMTE2IgogICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgPC9nPgogICAgPGcKICAgICAgIHN0eWxlPSJmaWxsOiNkMTM1N2Y7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpZD0iZzEyMiI+CiAgICAgIDx1c2UKICAgICAgICAgeGxpbms6aHJlZj0iI2dseXBoMi0xIgogICAgICAgICB4PSIzMTYuNDExOTkiCiAgICAgICAgIHk9IjEyNS4xNjQiCiAgICAgICAgIGlkPSJ1c2UxMjAiCiAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICA8L2c+CiAgICA8ZwogICAgICAgc3R5bGU9ImZpbGw6I2QxMzU3ZjtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJnMTI2Ij4KICAgICAgPHVzZQogICAgICAgICB4bGluazpocmVmPSIjZ2x5cGgwLTMiCiAgICAgICAgIHg9IjMyMC44ODE5OSIKICAgICAgICAgeT0iMTIyLjU2OCIKICAgICAgICAgaWQ9InVzZTEyNCIKICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZmlsbDojZDEzNTdmO2ZpbGwtb3BhY2l0eToxIgogICAgICAgaWQ9ImcxMzAiPgogICAgICA8dXNlCiAgICAgICAgIHhsaW5rOmhyZWY9IiNnbHlwaDAtMiIKICAgICAgICAgeD0iMzI1LjUzMzUxIgogICAgICAgICB5PSIxMjIuNTY4IgogICAgICAgICBpZD0idXNlMTI4IgogICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgPC9nPgogICAgPGcKICAgICAgIHN0eWxlPSJmaWxsOiNkMTM1N2Y7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpZD0iZzEzNCI+CiAgICAgIDx1c2UKICAgICAgICAgeGxpbms6aHJlZj0iI2dseXBoMi0yIgogICAgICAgICB4PSIzMzEuNTQ5MDEiCiAgICAgICAgIHk9IjExOC43NTgiCiAgICAgICAgIGlkPSJ1c2UxMzIiCiAgICAgICAgIHdpZHRoPSIxMDAlIgogICAgICAgICBoZWlnaHQ9IjEwMCUiIC8+CiAgICA8L2c+CiAgICA8ZwogICAgICAgc3R5bGU9ImZpbGw6I2QxMzU3ZjtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJnMTM4Ij4KICAgICAgPHVzZQogICAgICAgICB4bGluazpocmVmPSIjZ2x5cGgyLTIiCiAgICAgICAgIHg9IjMzMS41NDkwMSIKICAgICAgICAgeT0iMTI1LjE2NCIKICAgICAgICAgaWQ9InVzZTEzNiIKICAgICAgICAgd2lkdGg9IjEwMCUiCiAgICAgICAgIGhlaWdodD0iMTAwJSIgLz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZmlsbDojZDEzNTdmO2ZpbGwtb3BhY2l0eToxIgogICAgICAgaWQ9ImcxNDIiPgogICAgICA8dXNlCiAgICAgICAgIHhsaW5rOmhyZWY9IiNnbHlwaDEtMyIKICAgICAgICAgeD0iMzM2LjAxOTAxIgogICAgICAgICB5PSIxMjIuNTY4IgogICAgICAgICBpZD0idXNlMTQwIgogICAgICAgICB3aWR0aD0iMTAwJSIKICAgICAgICAgaGVpZ2h0PSIxMDAlIiAvPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1NzZlNzM7c3Ryb2tlLXdpZHRoOjAuNzk3MDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzkxLjAzOTA2LDE4NS43ODUxNiBWIDc0Ljk4ODI4MSIKICAgICAgIGlkPSJwYXRoMTQ0IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiM1NzZlNzM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICBkPSJtIDM5MS4wMzkwNiw3Mi4zOTg0MzggLTIuMDc0MjIsNC4xNDQ1MzEgMi4wNzQyMiwtMS41NTQ2ODggMi4wNzAzMSwxLjU1NDY4OCIKICAgICAgIGlkPSJwYXRoMTQ2IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1NzZlNzM7c3Ryb2tlLXdpZHRoOjAuNzk3MDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzc2Ljg2NzE5LDE3MS42MDkzNyBIIDQ4Ny42NjQwNiIKICAgICAgIGlkPSJwYXRoMTQ4IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiM1NzZlNzM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICBkPSJtIDQ5MC4yNTM5MSwxNzEuNjA5MzcgLTQuMTQ0NTQsLTIuMDcwMzEgMS41NTQ2OSwyLjA3MDMxIC0xLjU1NDY5LDIuMDc0MjIiCiAgICAgICBpZD0icGF0aDE1MCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMjM4YWQxO2ZpbGwtb3BhY2l0eTowLjU7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICBkPSJtIDM5MS4wMzkwNiwxNzEuNjA5MzcgaCA0NS4zNTU0NyBsIC00NS4zNTU0NywtNDUuMzUxNTYgeiBtIDAsMCIKICAgICAgIGlkPSJwYXRoMTUyIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiNkYzMwMmU7ZmlsbC1vcGFjaXR5OjAuNTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgIGQ9Ik0gNDM2LjM5NDUzLDE3MS42MDkzNyAzOTEuMDM5MDYsMTI2LjI1NzgxIFYgODYuNTcwMzEyIGggODUuMDM5MDYgdiA4NS4wMzkwNTggeiBtIDAsMCIKICAgICAgIGlkPSJwYXRoMTU0IiAvPgogIDwvZz4KPC9zdmc+Cg==" class="center top2 bottom2 width75">
<ul>
<li>原本圆内是一类样本，圆外是另一类样本，它们无法<span class="blue">线性可分</span></li>
<li>只需将<span class="mathjax-exps">$[x_1; x_2] \mapsto [z_1 = x_1^2; z_2 = x_2^2]$</span>，在新的<span class="mathjax-exps">$(z_1,z_2)$</span>空间中就线性可分了</li>
</ul>
<p>

$$
\begin{align*}
    x_1^2 + x_2^2 \le t ~ \longrightarrow ~ z_1 + z_2 \le t
\end{align*}
$$
</p>

<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section data-notes="" lineno="1339" class="slide " data-line="1339" data-h="16" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换 核技巧</h5></div></div>
<p>显式构造映射<span class="mathjax-exps">$\phi$</span>过于依赖使用者的姿势水平，如果后续模型的学习</p>
<ul>
<li>不需要样本<span class="mathjax-exps">$\xv$</span>的新特征的显式表示<span class="mathjax-exps">$\phi(\xv)$</span></li>
<li>只用到新特征空间的内积<span class="mathjax-exps">$\phi(\xv)^\top \phi(\zv)$</span></li>
</ul>
<p>那么对映射<span class="mathjax-exps">$\phi([x_1;x_2]) = [x_1^2; x_2^2; \sqrt{2} x_1 x_2; \sqrt{2} x_1; \sqrt{2} x_2; 1]$</span>和样本<span class="mathjax-exps">$\xv,\zv$</span>有</p>
<p>

$$
\begin{align*}
    \phi(\xv)^\top \phi(\zv) &amp; = x_1^2 z_1^2 + x_2^2 z_2^2 + 2 x_1 x_2 z_1 z_2 + 2 x_1 z_1 + 2 x_2 z_2 + 1 \\
    &amp; = (x_1 z_1 + x_2 z_2 + 1)^2 \\
    &amp; = (\xv^\top \zv + 1)^2 \\
    &amp; = \kappa (\xv, \zv)
\end{align*}
$$
</p>

<p>换言之构造新特征有两套方案：</p>
<ul>
<li>显式构造核映射<span class="mathjax-exps">$\phi([x_1;x_2]) = [x_1^2; x_2^2; \sqrt{2} x_1 x_2; \sqrt{2} x_1; \sqrt{2} x_2; 1]$</span></li>
<li>通过在原空间直接定义<span class="blue">核函数</span><span class="mathjax-exps">$\kappa (\xv, \zv) = (\xv^\top \zv + 1)^2$</span>隐式构造，这称为核技巧</li>
</ul>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section><section data-notes="" lineno="1370" class="slide " data-line="1370" data-h="17" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换 核函数</h5></div></div>
<p>核函数<span class="mathjax-exps">$\kappa(\cdot, \cdot)$</span>是双变量对称函数，即<span class="mathjax-exps">$\kappa(\xv, \zv) = \kappa(\zv, \xv)$</span>，常见的有：</p>
<ul>
<li>线性核<span class="mathjax-exps">$\kappa (\xv, \zv) = \xv^\top \zv$</span>，相当于用了恒等核映射<span class="mathjax-exps">$\phi(\xv) = \xv$</span></li>
<li>多项式核<span class="mathjax-exps">$\kappa (\xv, \zv) = (\xv^\top \zv + k)^d$</span>，<span class="mathjax-exps">$k = 0$</span>则为齐次多项式核，<span class="mathjax-exps">$d \in \Zbb_+$</span></li>
<li>高斯核<span class="mathjax-exps">$\kappa (\xv, \zv) = \exp (- \| \xv - \zv \|^2 / 2 \sigma^2)$</span>，<span class="mathjax-exps">$\sigma &gt; 0$</span>称为高斯核的带宽 (width)</li>
<li>拉普拉斯核<span class="mathjax-exps">$\kappa (\xv, \zv) = \exp (- \| \xv - \zv \| / \sigma)$</span>，<span class="mathjax-exps">$\sigma &gt; 0$</span></li>
<li>Sigmoid 核<span class="mathjax-exps">$\kappa (\xv, \zv) = \tanh (\beta \xv^\top \zv + \theta)$</span>，<span class="mathjax-exps">$\tanh$</span>为双曲正切函数，<span class="mathjax-exps">$\beta &gt; 0$</span>，<span class="mathjax-exps">$\theta &lt; 0$</span></li>
</ul>
<br>
<p>将 PCA 中的样本<span class="mathjax-exps">$\xv$</span>用<span class="mathjax-exps">$\phi(\xv)$</span>替代，就得到了核 PCA，先升维再降维</p>
<br>
<p>PCA：<span class="mathjax-exps">$\max_{\|\wv\|_2^2 = 1} \wv^\top \Xv^\top \Xv \wv$</span> → 核 PCA：<span class="mathjax-exps">$\max_{\|\wv\|_2^2 = 1} \wv^\top \phi(\Xv)^\top \phi(\Xv) \wv$</span></p>
<p>其中<span class="mathjax-exps">$\Xv = \begin{bmatrix} \xv_1^\top \\ \vdots \\ \xv_m^\top \end{bmatrix}$</span>、<span class="mathjax-exps">$\phi(\Xv) = \begin{bmatrix} \phi(\xv_1)^\top \\ \vdots \\ \phi(\xv_m)^\top \end{bmatrix}$</span>，注意两个<span class="mathjax-exps">$\wv$</span>的维度不一样</p>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="1394" class="slide " data-line="1394" data-h="17" data-v="1">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换 核 PCA</h5></div></div>
<p>问题：如何让模型中只出现内积<span class="mathjax-exps">$\phi(\xv_i)^\top \phi(\xv_j)$</span>的形式？</p>
<p>对<span class="mathjax-exps">$\wv$</span>做正交分解<span class="mathjax-exps">$\wv = \sum_{i \in [m]} \alpha_i \phi(\xv_i) + \vv = \phi(\Xv)^\top \alphav + \vv$</span>，其中</p>
<p>

$$
\begin{align*}
    \vv \perp \span \{ \phi(\xv_1), \ldots, \phi(\xv_m) \} ~ \Longrightarrow ~ \phi(\Xv) \vv = \zerov
\end{align*}
$$
</p>

<p>于是</p>
<p>

$$
\begin{align*}
    &amp; \|\wv\|_2^2 = \alphav^\top \phi(\Xv) \phi(\Xv)^\top \alphav + \vv^\top \vv = \alphav^\top \Kv \alphav + \vv^\top \vv \\
    &amp; \phi(\Xv) \wv = \phi(\Xv) (\phi(\Xv)^\top \alphav + \vv) = \phi(\Xv) \phi(\Xv)^\top \alphav = \Kv \alpha
\end{align*}
$$
</p>

<p>其中<span class="mathjax-exps">$\Kv = \phi(\Xv) \phi(\Xv)^\top = \begin{bmatrix} \phi(\xv_1)^\top \phi(\xv_1) &amp; \cdots &amp; \phi(\xv_1)^\top \phi(\xv_m) \\ \vdots &amp; \ddots &amp; \vdots \\ \phi(\xv_m)^\top \phi(\xv_1) &amp; \cdots &amp; \phi(\xv_m)^\top \phi(\xv_m) \end{bmatrix}$</span>为核矩阵</p>
<p>核 PCA 可重写为<span class="mathjax-exps">$\max_{\alphav, \vv} ~ \alphav^\top \Kv \Kv \alphav, \quad \st ~ \alphav^\top \Kv \alphav + \vv^\top \vv = 1$</span></p>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section><section vertical="true" data-notes="" lineno="1431" class="slide " data-line="1431" data-h="17" data-v="2">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换 核 PCA</h5></div></div>
<p>核 PCA：<span class="mathjax-exps">$\max_{\alphav, \vv} ~ \alphav^\top \Kv \Kv \alphav, \quad \st ~ \alphav^\top \Kv \alphav + \vv^\top \vv = 1$</span></p>
<p>设最优解为<span class="mathjax-exps">$(\alphav_\star, ~ \vv_\star)$</span>，下面说明<span class="mathjax-exps">$\vv_\star = \zerov$</span></p>
<ul>
<li>若<span class="mathjax-exps">$\vv_\star^\top \vv_\star = c &gt; 0$</span>，则<span class="mathjax-exps">$\alphav_\star^\top \Kv \alphav_\star = 1 - c &lt; 1$</span></li>
<li><span class="mathjax-exps">$(\alphav_0 = 1 / \sqrt{1-c} ~ \alphav_\star, ~ \vv_0 = \zerov)$</span>也是一组可行解</li>
<li>显然<span class="mathjax-exps">$\alphav_0^\top \Kv \Kv \alphav_0 = \alphav_\star^\top \Kv \Kv \alphav_\star / (1-c) &gt; \alphav_\star^\top \Kv \Kv \alphav_\star$</span>，这与<span class="mathjax-exps">$\alphav_\star$</span>的最优性矛盾</li>
</ul>
<br>
<p>核 PCA 的最终形式为<span class="mathjax-exps">$\max_\alphav ~ \alphav^\top \Kv \Kv \alphav, \quad \st ~ \alphav^\top \Kv \alphav = 1$</span></p>
<p>通过拉格朗日乘子法求得系数<span class="mathjax-exps">$\alphav$</span>后，样本<span class="mathjax-exps">$\xv_j$</span>在成分<span class="mathjax-exps">$\wv$</span>上的投影为</p>
<p>

$$
\begin{align*}
    \wv^\top \phi(\xv_j) = \sum_{i \in [m]} \alpha_i \phi(\xv_i)^\top \phi(\xv_j) = \sum_{i \in [m]} \alpha_i \kappa (\xv_i, \xv_j)
\end{align*}
$$
</p>

<p>通过核 PCA 可以看出，全程我们都用不到<span class="mathjax-exps">$\phi(\cdot)$</span>，只需要<span class="mathjax-exps">$\kappa(\cdot, \cdot)$</span></p>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section></section><section data-notes="" lineno="1463" class="slide " data-line="1463" data-h="18" data-v="0">
<div class="header"><img class="hust" src=""><div class="title"><hr class="hr_top"><h5>特征变换 非线性复合</h5></div></div>
<p>设<span class="mathjax-exps">$\sigma_1, \ldots, \sigma_l$</span>是一系列简单的非线性函数，如<span class="mathjax-exps">$[x]_+ = \max \{ x, 0 \}$</span></p>
<p>一个简单的<span class="mathjax-exps">$l$</span>层神经网络：</p>
<p>

$$
\begin{align*}
    \hv_1 &amp; = \sigma_1(\Wv_1 \xv + \bv_1) \\
    \hv_2 &amp; = \sigma_2(\Wv_2 \hv_1 + \bv_2) \\
    &amp; \vdots \\
    \hv_{l-1} &amp; = \sigma_{l-1}(\Wv_{l-1} \hv_{l-2} + \bv_{l-1}) \\
    f(\xv) &amp; = \sigma_l (\Wv_l \hv_{l-1} + \bv_l)
\end{align*}
$$
</p>

<p>前<span class="mathjax-exps">$l-1$</span>层复合为特征变换，最后一层拟合类别标记，即为模型学习</p>
<br>
<p>对比：</p>
<ul>
<li>核方法毕其功于一役，一个核函数直接搞定问题，难点在于<span class="blue">如何设计核函数</span></li>
<li>神经网络步步为营，一步一个小目标，难点在于<span class="blue">如何设计一系列非线性函数</span></li>
</ul>
<div class="footer"><hr class="hr_bottom"><div class="multi_column"><h6 class="bottom_left">图神经网络导论</h6><h6 class="bottom_center">机器学习</h6><h6 class="bottom_right">tengzhang@hust.edu.cn</h6></div></div>
</section>
      </div>
    </div>
    
      </div>
      
      
    
    
      <script>
        Reveal.initialize({"margin":0,"transition":"none","enableSpeakerNotes":true,"dependencies":[{"src":"../common/js/notes/notes.js","async":true}]})
      </script>
      
    <script>
// config mermaid init call
// http://knsv.github.io/mermaid/#configuration
//
// You can edit the 'MERMAID_CONFIG' variable below.
MERMAID_CONFIG = {
  startOnLoad: false
}

if (window['MERMAID_CONFIG']) {
  window['MERMAID_CONFIG'].startOnLoad = false
  window['MERMAID_CONFIG'].cloneCssStyles = false
  window['MERMAID_CONFIG'].theme = "mermaid.css"
}
mermaid.initialize(window['MERMAID_CONFIG'] || {})
if (typeof(window['Reveal']) !== 'undefined') {
  function mermaidRevealHelper(event) {
    var currentSlide = event.currentSlide
    var diagrams = currentSlide.querySelectorAll('.mermaid')
    for (var i = 0; i < diagrams.length; i++) {
      var diagram = diagrams[i]
      if (!diagram.hasAttribute('data-processed')) {
        mermaid.init(null, diagram, ()=> {
          Reveal.slide(event.indexh, event.indexv)
        })
      }
    }
  }
  Reveal.addEventListener('slidechanged', mermaidRevealHelper)
  Reveal.addEventListener('ready', mermaidRevealHelper)
} else {
  mermaid.init(null, document.getElementsByClassName('mermaid'))
}
</script>
    
    
    
    
    
  
    </body></html>